O que é um arquivo DIB?
Um arquivo DIB armazena um bitmap do Windows independente de dispositivo usando cabeçalhos definidos, tabelas de cores opcionais e dados de pixels. Sua representação é intimamente relacionada ao BMP e foi projetada para ser independente de um dispositivo de exibição específico.
Como funcionam os arquivos DIB
Um DIB descreve pixels de uma imagem raster com um cabeçalho de informações do bitmap, máscaras de cor ou uma tabela de cores opcionais e linhas de varredura alinhadas a quatro bytes. A mesma estrutura aparece em três lugares: dentro de um arquivo BMP após o cabeçalho de 14 bytes do tipo BITMAPFILEHEADER, como um DIB empacotado na memória e na área de transferência do Windows como CF_DIB ou CF_DIBV5. O Windows trata .dib como uma segunda extensão para BMP, enquanto algumas ferramentas usam DIB para se referir à forma sem cabeçalho de arquivo. Existem quatro gerações de cabeçalho (BITMAPCOREHEADER, BITMAPINFOHEADER, BITMAPV4HEADER, BITMAPV5HEADER), diferenciadas pelo valor de tamanho em seus primeiros quatro bytes. Uma tabela de cores é obrigatória com 1, 4 e 8 bits por pixel, e bitmaps BI_BITFIELDS colocam três máscaras de cor diretamente após um BITMAPINFOHEADER, portanto um importador precisa ler a estrutura declarada em vez de presumir pixels de 24 bits.
Informações essenciais
- DIB pode se referir a dados com ou sem o cabeçalho de arquivo BMP. O codec BMP do Windows registra tanto
.bmpquanto.dibpara o mesmo formatoimage/bmp, que começa com umBITMAPFILEHEADER(bytesBM); os dadosCF_DIBda área de transferência consistem em umBITMAPINFOseguido diretamente pelos bits dos pixels; e o ImageMagick define seu formatoDIBcomo um arquivo BMP sem o cabeçalho BMP. Verifique a presença da assinaturaBMantes de escolher um analisador. - Linhas de varredura sem compressão recebem preenchimento até um múltiplo de quatro bytes, e esse preenchimento não é dado de pixel: um bitmap 10×10 de 24 bits contém dois bytes de preenchimento por linha. Calcule o passo de linha como
((width * bitsPerPixel + 31) & ~31) >> 3. Bitmaps comprimidos com RLE são a exceção e não são alinhados dessa maneira. - Uma altura positiva significa armazenamento de baixo para cima, em que a primeira linha armazenada é a inferior da imagem, e uma altura negativa significa armazenamento de cima para baixo. O armazenamento de cima para baixo está disponível apenas para dados sem compressão: bitmaps comprimidos com RLE e bitmaps
BITMAPCOREHEADERnão podem ser armazenados de cima para baixo. - Não presuma que um DIB de 32 bits contenha transparência válida. O codec BMP da Microsoft ignora o canal extra de bitmaps de 16 bits e de 32 bits porque muitos arquivos legados contêm dados inválidos nesse canal; a partir do Windows 8, ele lê alfa apenas de arquivos de 32 bits gravados com um
BITMAPV5HEADER. Essa é a política de um codec, não um limite do formato: oBITMAPV4HEADERanterior também define uma máscara alfa, portanto confirme como seu próprio decodificador trata o quarto canal.
Quando os arquivos DIB são importantes
Espere encontrar dados DIB em APIs gráficas do Windows, trocas de dados pela área de transferência e fluxos de trabalho de imagens legados. A análise correta exige atenção às variantes de cabeçalho, ao preenchimento das linhas e às tabelas de cores, além de verificar se as linhas de pixels são armazenadas de baixo para cima.
Fontes
- Microsoft Learn: bitmaps independentes de dispositivo
- Microsoft Learn: tipos de cabeçalho de bitmap (gerações de cabeçalho, tabelas de cores, alinhamento de linhas de varredura)
- Microsoft Learn: armazenamento de bitmaps (estrutura de arquivo BMP com BITMAPFILEHEADER)
- Microsoft Learn: estrutura BITMAPINFOHEADER (sinal da altura, tabelas de cores, passo de linha)
- Microsoft Learn: estrutura BITMAPV4HEADER (máscaras de cor e alfa)
- Microsoft Learn: formatos padrão da área de transferência (CF_DIB, CF_DIBV5)
- Microsoft Learn: visão geral do formato BMP, Windows Imaging Component (extensões e tratamento do alfa)
- ImageMagick: formatos de imagem, entrada DIB