aspose.info
PT

BMP - Formato de arquivo de imagem

Atualizado em

O que é um arquivo BMP?

Arquivos com extensão .BMP representam arquivos de imagem de bitmap que são usados para armazenar imagens digitais de bitmap. Essas imagens são independentes do adaptador gráfico e também são chamadas de formato de arquivo de bitmap independente de dispositivo (DIB). Essa independência serve para abrir o arquivo em várias plataformas, como Microsoft Windows e Mac. O formato de arquivo BMP pode armazenar dados como imagens digitais bidimensionais em formato monocromático e colorido com várias profundidades de cor.

Especificações de formato de arquivo BMP

Os bitmaps independentes de dispositivo agem como uma ajuda para trocar bitmaps entre dispositivos e aplicativos. Devido à evolução contínua deste formato de arquivo, as informações contidas nos cabeçalhos podem ser diferentes conforme a versão do Bitmap. Um único arquivo de bitmap consiste em estruturas de tamanho fixo e variável em uma sequência específica.

As estruturas em um arquivo Bitmap são organizadas na seguinte ordem:

EstruturaOpcionalTamanhoPropósito
File HeaderNo14Para armazenar informações gerais sobre o arquivo de imagem bitmap
DIB HeaderNoFixed-SizePara armazenar informações detalhadas sobre a imagem bitmap e definir o formato de pixel
Extra Bit MasksSim12 ou 16 bytesPara definir o formato de pixel
Paleta de coresSemi-opcionalTamanho variávelPara definir as cores usadas pelos dados da imagem bitmap
Espaço1SimTamanho da variávelAlinhamento da estrutura
Matriz de pixelsNãoTamanho variávelO formato de pixel é definido pelo cabeçalho DIB ou pelas máscaras de bits extras.
Espaço2SimTamanho variávelAlinhamento da estrutura
Perfil de cores ICCSimTamanho variávelPara definir o perfil de cores para gerenciamento de cores

Quando uma imagem de bitmap é carregada na memória, ela se torna uma estrutura DIB, usada pelo Windows por meio de sua API GDI. O cabeçalho do arquivo não faz parte dessa estrutura de dados. A cor também pode consistir em entradas de 16 bits que constituem índices para a paleta referenciada no momento em vez de definições de cores RGB explícitas. Vamos dar uma olhada em alguns deles em detalhes, especialmente os cabeçalhos.

Cabeçalho do arquivo bitmap

Um cabeçalho de arquivo de bitmap é semelhante a outros cabeçalhos de arquivo usados para identificar o arquivo. Como existem diferentes variantes do formato de arquivo BMP, os primeiros 2 bytes do formato de arquivo BMP são o caractere “B” e depois o caractere “M” na codificação ASCII. Todos os valores inteiros são armazenados no formato little-endian.

Deslocamento hexDeslocamento decTamanhoPropósito
0002 bytesO campo de cabeçalho utilizado para identificar o arquivo BMP e DIB é 0x42 0x4D em hexadecimal, igual ao BM em ASCII. Pode seguir valores possíveis.* BM – Windows 3.1x, 95, NT, … etc. * BA – matriz de bitmap de estrutura OS/2 * CI – estrutura OS/2 ícone de cor * CP – ponteiro de cor do OS/2 const * IC – ícone de estrutura do OS/2 * PT – ponteiro do OS/2
0224 bytesO tamanho do arquivo BMP em bytes
0662 bytesReservado; o valor real depende do aplicativo que cria a imagem
0882 bytesReservado; o valor real depende do aplicativo que cria a imagem
0A104 bytesO deslocamento, ou seja, o endereço inicial, do byte onde os dados da imagem bitmap (matriz de pixels) podem ser encontrados.

Cabeçalho DIB (cabeçalho de informações de bitmap)

As informações detalhadas sobre a imagem são representadas por este cabeçalho. Com base nessas informações, será determinado o aplicativo que será usado para exibir a imagem na tela. Todos esses cabeçalhos contêm um campo DWORD (32 bits), especificando seu tamanho, para que um aplicativo possa determinar facilmente o cabeçalho usado na imagem. Isso se deve basicamente ao fato de o formato DIB ter sofrido várias extensões. A seguir está o cabeçalho DIB com os campos listados.

Paleta de cores

Uma paleta de cores BMP é uma matriz de estruturas que especificam os valores de intensidade RGB de cada cor na paleta de cores de um dispositivo de exibição. Cada pixel nos dados de bitmap armazena um único valor usado como índice na paleta de cores. As informações de cor armazenadas no elemento nesse índice especificam a cor desse pixel. A disponibilidade de cores em um arquivo bitmap varia da seguinte forma:

  • Um, 4 e 8 bits - espera-se que sempre contenha uma paleta de cores
  • Dezesseis, 24 e 32 bits - nunca contêm paletas de cores
  • Arquivos BMP de dezesseis e 32 bits - contêm valores de máscara de campos de bits no lugar da paleta de cores

Armazenamento de pixels

Os pixels de bitmap são armazenados como bits compactados em linhas onde o tamanho de cada linha é arredondado para um múltiplo de 4 bytes (um DWORD de 32 bits) por preenchimento. A quantidade total de bytes necessária para armazenar os pixels de uma imagem não pode ser calculada diretamente apenas contando os bits. Como há preenchimento envolvido, o efeito de arredondar o tamanho de cada linha para um múltiplo de 4 bytes é necessário. Os bytes de preenchimento (não necessariamente 0) devem ser anexados ao final das linhas para aumentar o comprimento das linhas para um múltiplo de quatro bytes. Quando a matriz de pixels é carregada na memória, cada linha deve começar em um endereço de memória múltiplo de 4.

A imagem é realmente descrita pela representação DWORDs de 32 bits da matriz de pixels. Normalmente os pixels são armazenados “de baixo para cima”, começando no canto inferior esquerdo, indo da esquerda para a direita, e depois linha por linha de baixo para cima da imagem. Os formatos de pixel e suas implicações estão listados abaixo:

  • O formato de 1 bit por pixel (1bpp) suporta 2 cores distintas (por exemplo: preto e branco).
  • O formato de 2 bits por pixel (2bpp) suporta 4 cores distintas e armazena 4 pixels por 1 byte, sendo o pixel mais à esquerda nos dois bits mais significativos. Cada valor de pixel é um índice de 2 bits em uma tabela de até 4 cores.
  • O formato de 4 bits por pixel (4bpp) suporta 16 cores distintas e armazena 2 pixels por 1 byte, sendo o pixel mais à esquerda no nibble mais significativo. Cada valor de pixel é um índice de 4 bits em uma tabela de até 16 cores.
  • O formato de 8 bits por pixel (8bpp) suporta 256 cores distintas e armazena 1 pixel por 1 byte. Cada byte é um índice em uma tabela de até 256 cores.
  • O formato de 16 bits por pixel (16bpp) suporta 65536 cores distintas e armazena 1 pixel por WORD de 2 bytes. Cada WORD pode definir as amostras alfa, vermelha, verde e azul do pixel.
  • O formato de pixel de 24 bits (24bpp) suporta 16.777.216 cores distintas e armazena 1 valor de pixel por 3 bytes. Cada valor de pixel define as amostras de vermelho, verde e azul do pixel (8.8.8.0.0 em notação RGBAX). Especificamente, na ordem: azul, verde e vermelho (8 bits por cada amostra).
  • O formato de 32 bits por pixel (32bpp) suporta 4.294.967.296 cores distintas e armazena 1 pixel por DWORD de 4 bytes. Cada DWORD pode definir as amostras alfa, vermelha, verde e azul do pixel.

Referências

Veja também