¿Qué es un archivo DIB?
Un archivo DIB almacena un mapa de bits de Windows independiente del dispositivo mediante encabezados definidos, tablas de colores opcionales y datos de píxeles. Su representación está estrechamente relacionada con BMP y está diseñada para ser independiente de un dispositivo de visualización concreto.
Cómo funcionan los archivos DIB
Un DIB describe píxeles ráster mediante un encabezado de información del mapa de bits, máscaras de color opcionales o una tabla de colores y líneas de barrido alineadas a cuatro bytes. La misma estructura aparece en tres lugares: dentro de un archivo BMP después del BITMAPFILEHEADER de 14 bytes, como un DIB empaquetado en memoria y en el portapapeles de Windows como CF_DIB o CF_DIBV5. Windows trata .dib como una segunda extensión de BMP, mientras que algunas herramientas usan DIB para referirse a la forma sin encabezado. Existen cuatro generaciones de encabezados (BITMAPCOREHEADER, BITMAPINFOHEADER, BITMAPV4HEADER, BITMAPV5HEADER), que se distinguen por el valor de tamaño de sus primeros cuatro bytes. La tabla de colores es obligatoria con 1, 4 y 8 bits por píxel, y los mapas de bits BI_BITFIELDS colocan tres máscaras de color directamente después de un BITMAPINFOHEADER, por lo que un importador debe leer la disposición declarada en lugar de suponer que los píxeles tienen 24 bits.
Datos clave
- DIB puede referirse a datos con o sin el encabezado de archivo BMP. El códec BMP de Windows registra tanto
.bmpcomo.dibpara el mismo formatoimage/bmp, que comienza con unBITMAPFILEHEADER(bytesBM); los datosCF_DIBdel portapapeles consisten en unBITMAPINFOseguido directamente de los bits de los píxeles; e ImageMagick define su formatoDIBcomo un archivo BMP sin el encabezado BMP. Comprueba la firmaBMantes de elegir un analizador. - Las líneas de barrido sin comprimir se rellenan hasta alcanzar un múltiplo de cuatro bytes, y el relleno no es parte de los datos de píxeles: un mapa de bits 10×10 de 24 bits contiene dos bytes de relleno por fila. Calcula la distancia entre filas como
((width * bitsPerPixel + 31) & ~31) >> 3. Los mapas de bits comprimidos con RLE son la excepción y no se alinean de esta manera. - Una altura positiva indica almacenamiento de abajo hacia arriba, en el que la primera fila almacenada es la parte inferior de la imagen, y una altura negativa indica almacenamiento de arriba hacia abajo. El almacenamiento de arriba hacia abajo solo está disponible para datos sin comprimir: los mapas de bits comprimidos con RLE y los mapas de bits
BITMAPCOREHEADERno pueden almacenarse de arriba hacia abajo. - No supongas que un DIB de 32 bits contiene transparencia válida. El códec BMP de Microsoft ignora el canal adicional de los mapas de bits de 16 bits y 32 bits porque muchos archivos heredados contienen datos no válidos en ese canal; a partir de Windows 8, solo lee el canal alfa de archivos de 32 bits escritos con un
BITMAPV5HEADER. Esa es la política de un códec, no una limitación del formato: elBITMAPV4HEADERanterior también define una máscara alfa, así que confirma cómo trata tu propio decodificador el cuarto canal.
Cuándo son relevantes los archivos DIB
Es habitual encontrar datos DIB en las API gráficas de Windows, las transferencias del portapapeles y los flujos de trabajo de imágenes heredados. Para analizarlos correctamente, hay que prestar atención a las variantes del encabezado, los bytes de relleno de las filas, las tablas de colores y si las filas de píxeles se almacenan de abajo hacia arriba.
Fuentes
- Microsoft Learn: mapas de bits independientes del dispositivo
- Microsoft Learn: tipos de encabezados de mapas de bits (generaciones de encabezados, tablas de colores y alineación de líneas de barrido)
- Microsoft Learn: almacenamiento de mapas de bits (estructura de archivos BMP con BITMAPFILEHEADER)
- Microsoft Learn: estructura BITMAPINFOHEADER (signo de la altura, tablas de colores y distancia entre filas)
- Microsoft Learn: estructura BITMAPV4HEADER (máscaras de color y alfa)
- Microsoft Learn: formatos estándar del portapapeles (CF_DIB, CF_DIBV5)
- Microsoft Learn: descripción general del formato BMP, Windows Imaging Component (extensiones y tratamiento del canal alfa)
- ImageMagick: formatos de imagen, entrada DIB