Partilhar via


Tipos de cabeçalho Bitmap

O bitmap tem quatro tipos de cabeçalho básicos:

Os quatro tipos de cabeçalho de bitmap são diferenciados pelo membro Tamanho, que é o primeiro DWORD em cada uma das estruturas.

A estrutura BITMAPV5HEADER é uma estrutura BITMAPV4HEADER estendida, que é uma estrutura BITMAPINFOHEADER estendida. No entanto, BITMAPINFOHEADER e BITMAPCOREHEADER contam apenas com o membro Tamanho em comum com outras estruturas de cabeçalho de bitmap.

Os formatos BITMAPCOREHEADER e BITMAPV4HEADER foram substituídos por BITMAPINFOHEADER e BITMAPV5HEADER, respectivamente. Os formatos BITMAPCOREHEADER e BITMAPV4HEADER são apresentados para completude e compatibilidade com versões anteriores.

O formato de um DIB é o seguinte (para obter mais informações, confira Armazenamento de bitmap):

Uma tabela de cores descreve como os valores de pixel correspondem aos valores de cor RGB. RGB é um modelo para descrever cores que são produzidas pela emissão de luz.

Os dados de Perfil referem-se ao nome do arquivo de perfil (perfil vinculado) ou aos bits de perfil reais (perfil incorporado). O formato do arquivo coloca os dados do perfil no final do arquivo. Os dados do perfil são colocados logo após a tabela de cores (se houver). No entanto, se a função receber um DIB compactado, os dados de perfil virão após os bits de bitmap, como no formato de arquivo.

Os dados de perfil só existirão para as estruturas BITMAPV5HEADER em que bV5CSType é PROFILE_LINKED ou PROFILE_EMBEDDED. Para funções que recebem DIBs empacotados, os dados de perfil vêm após os dados de bitmap.

Um dispositivo paletizado é qualquer dispositivo que usa paletas para atribuir cores. O exemplo clássico de um dispositivo paletizado é uma tela rodando em profundidade de cores de 8 bits (ou seja, 256 cores). A exibição nesse modo usa uma pequena tabela de cores para atribuir cores a um bitmap. As cores em um bitmap são atribuídas à cor mais próxima na paleta que o dispositivo está usando. O dispositivo paletizado não cria uma paleta ideal para exibir o bitmap; ele simplesmente usa o que está na paleta atual. Os aplicativos são responsáveis por criar uma paleta e selecioná-la no sistema. Em geral, os bitmaps de 16, 24 e 32 bits por pixel (bpp) não contêm tabelas de cores (também conhecidas como paletas ideais do bitmap). O aplicativo é responsável por gerar uma paleta ideal nesse caso. No entanto, os bitmaps de 16, 24 e 32 bpp podem conter tabelas de cores ideais para exibição em dispositivos paletizados. Nesse caso, o aplicativo só precisa criar uma paleta com base na tabela de cores presente no arquivo bitmap.

Os bitmaps de 1, 4 ou 8 bpp devem ter uma tabela de cores com um tamanho máximo com base no bpp. O tamanho máximo para bitmaps de 1, 4 e 8 bpp é 2 elevado à potência do bpp. Assim, um bitmap de 1 bpp tem no máximo duas cores, o bitmap de 4 bpp tem no máximo 16 cores, e o bitmap de 8 bpp tem no máximo 256 cores.

Os bitmaps de 16, 24 ou 32 bpp não exigem tabelas de cores, mas podem tê-las para especificar cores para dispositivos paletizados. Se uma tabela de cores estiver presente para bitmap de 16, 24 ou 32 bpp, o membro biClrUsed especificará o tamanho da tabela de cores, e a tabela de cores deverá ter esse número de cores. Se biClrUsed for zero, não haverá tabela de cores.

As máscaras de campo de bits vermelha, verde e azul para bitmaps BI_BITFIELD seguem imediatamente as estruturas BITMAPINFOHEADER, BITMAPV4HEADER e BITMAPV5HEADER. As estruturas BITMAPV4HEADER e BITMAPV5HEADER contêm membros adicionais para máscaras vermelha, verde e azul da seguinte maneira.

Membro Significado
RedMask Máscara de cor que especifica o componente vermelho de cada pixel, válida somente se o membro Compression estiver definido como BI_BITFIELDS.
GreenMask Máscara de cor que especifica o componente verde de cada pixel, válida somente se o membro Compression estiver definido como BI_BITFIELDS.
BlueMask Máscara de cor que especifica o componente azul de cada pixel, válida somente se o membro Compression estiver definido como BI_BITFIELDS.

 

Quando o membro biCompression de BITMAPINFOHEADER é definido como BI_BITFIELDS, e a função recebe um argumento do tipo LPBITMAPINFO, as máscaras de cores seguirão imediatamente o cabeçalho. A tabela de cores, se presente, seguirá as máscaras de cores. Os bitmaps BITMAPCOREHEADER não oferecem suporte a máscaras de cores.

Por padrão, os dados de bitmap são de baixo para cima no formato. De baixo para cima significa que a primeira linha de digitalização nos dados de bitmap é a última linha de digitalização a ser exibida. Por exemplo, o pixel 0 da linha de digitalização 0 dos dados de bitmap de um bitmap de 10 pixels por 10 pixels será o pixel 0 da 9a linha de digitalização da imagem exibida ou impressa. Os bitmaps de formato RLE (com codificação run-length) e os bitmaps BITMAPCOREHEADER não podem ser bitmaps de cima para baixo. As linhas de digitalização são alinhadas ao DWORD, exceto para bitmaps compactados com RLE. Eles devem ser preenchidos para larguras de linha de digitalização, em bytes, que não são divisíveis uniformemente por quatro, exceto para bitmaps compactados com RLE. Por exemplo, um bitmap de 10 por 10 pixels e 24 bpp terá dois bytes de preenchimento no final de cada linha de digitalização.