Tipos de encabezados de mapa de bits
El mapa de bits tiene cuatro tipos de encabezado básicos:
Los cuatro tipos de encabezados de mapa de bits se diferencian por el miembro Size, que es el primer DWORD de cada una de las estructuras.
La estructura BITMAPV5HEADER es un estructura BITMAPV4HEADER ampliada, que es una estructura BITMAPINFOHEADER ampliada. Sin embargo, BITMAPINFOHEADER y BITMAPCOREHEADER solo tienen el miembro Size en común con otras estructuras de encabezado de mapa de bits.
Los formatos BITMAPCOREHEADER y BITMAPV4HEADER se han reemplazado por BITMAPINFOHEADER y BITMAPV5HEADER, respectivamente. Los formatos BITMAPCOREHEADER y BITMAPV4HEADER se presentan por motivos de integridad y compatibilidad con versiones anteriores.
El formato de un DIB es el siguiente (para obtener más información, consulte Almacenamiento de mapa de bits ):
- una estructura BITMAPFILEHEADER
- o una estructura BITMAPCOREHEADER, BITMAPINFOHEADER, BITMAPV4HEADER o BITMAPV5HEADER.
- una tabla de colores opcional, que es un conjunto de estructuras RGBQUAD o un conjunto de estructuras RGBTRIPLE.
- los datos del mapa de bits
- datos de perfil opcionales
En una tabla de colores se describe cómo los valores de píxel corresponden a los valores de color RGB. RGB es un modelo que sirve para describir los colores producidos mediante la emisión de luz.
Los Datos de perfil hacen referencia al nombre de archivo de perfil (perfil vinculado) o a los bits de perfil reales (perfil incrustado). El formato de archivo coloca los datos de perfil al final del archivo. Los datos de perfil se colocan justo después de la tabla de colores (si existe). Sin embargo, si la función recibe un DIB empaquetado, los datos de perfil vendrán después de los bits del mapa de bits, como en el formato de archivo.
Los datos de perfil solo existirán en estructura BITMAPV5HEADER donde bV5CSType es PROFILE_LINKED o PROFILE_EMBEDDED. En el caso de las funciones que reciben DIB empaquetados, los datos de perfil se incluyen después de los datos del mapa de bits.
Un dispositivo con paleta es cualquier dispositivo que use paletas para asignar colores. El ejemplo clásico de un dispositivo con paleta es una pantalla que se ejecuta con una profundidad de color de 8 bits (es decir, 256 colores). La pantalla en este modo usa una tabla de colores pequeña para asignar colores a un mapa de bits. Los colores de un mapa de bits se asignan al color más cercano de la paleta que usa el dispositivo. El dispositivo con paleta no crea una paleta óptima para mostrar el mapa de bits; solo usa lo que se encuentra en la paleta actual. Las aplicaciones son responsables de crear una paleta y seleccionarla en el sistema. En general, los mapas de bits de 16, 24 y 32 bits por píxel (bpp) no contienen tablas de colores (o bien, paletas óptimas para el mapa de bits); la aplicación se encarga de generar una paleta óptima en este caso. Sin embargo, los mapas de bits de 16, 24 y 32 bpp pueden contener tablas de colores óptimas para mostrarse en dispositivos con paleta; en este caso, la aplicación solo necesita crear una paleta basada en la tabla de colores presente en el archivo de mapa de bits.
Los mapas de bits de 1, 4 o 8 bpp deben tener una tabla de colores con un tamaño máximo basado en los bpp. El tamaño máximo de 1, 4 y 8 bpp de los mapas de bits es 2 elevado a los bpp. Por lo tanto, un mapa de bits de 1 bpp tiene un máximo de dos colores, el mapa de bits de 4 bpp tiene un máximo de 16 colores y el mapa de bits de 8 bpp tiene un máximo de 256 colores.
Los mapas de bits que son de 16, 24 o 32 bpp no necesitan tablas de colores, pero pueden tener que indicar los colores en dispositivos con paleta. Si hay una tabla de colores para el mapa de bits de 16, 24 o 32 bpp, el miembro biClrUsed indicará el tamaño de la tabla de colores y la tabla de colores debe tener ese número de colores. Si biClrUsed es cero, no habrá ninguna tabla de colores.
Las máscaras de campo de bits rojo, verde y azul de los mapas de bits BI_BITFIELD siguen inmediatamente a las estructuras BITMAPINFOHEADER, BITMAPV4HEADER y BITMAPV5HEADER. Las estructuras BITMAPV4HEADER y BITMAPV5HEADER contienen miembros adicionales para máscaras rojas, verdes y azules, tal como se indica a continuación.
Member | Significado |
---|---|
RedMask | Máscara de color que indica el componente rojo de cada píxel, válido solo si el miembro Compression está como BI_BITFIELDS. |
GreenMask | Máscara de color que indica el componente verde de cada píxel, válido solo si el miembro Compression está como BI_BITFIELDS. |
BlueMask | Máscara de color que indica el componente azul de cada píxel, válido solo si el miembro Compression está como BI_BITFIELDS. |
Cuando el miembro biCompression de BITMAPINFOHEADER está como BI_BITFIELDS y la función recibe un argumento de tipo LPBITMAPINFO, las máscaras de color seguirán inmediatamente al encabezado. La tabla de colores, si existe, seguirá las máscaras de color. Los mapas de bits de BITMAPCOREHEADER no admiten máscaras de color.
De forma predeterminada, los datos de mapa de bits van de abajo a arriba. De abajo arriba significa que la primera línea de exploración de los datos de mapa de bits es la última línea de exploración que se va a mostrar. Por ejemplo, el píxel 0 de la línea de exploración 0 de los datos de mapa de bits de un mapa de bits de 10 píxeles por 10 píxeles será el píxel 0 de la 9a línea de exploración de la imagen mostrada o impresa. Los mapas de bits con formato comprimido Run-length encoded (RLE) y los mapas de bits de BITMAPCOREHEADER no pueden ser mapas de bits de arriba abajo. Las líneas de exploración están alineadas con DWORD, excepto en mapas de bits comprimidos por RLE. Deben rellenarse para anchos de línea de exploración, en bytes, que no sean divisibles uniformemente por cuatro, excepto en mapas de bits comprimidos por RLE. Por ejemplo, un mapa de bits de 10 por 10 píxeles de 24 bpp tendrá dos bytes de relleno al final de cada línea de exploración.