wingdi.h

Estructura BITMAPINFO

Definición

typedef struct tagBITMAPINFO { // bmi 
   BITMAPINFOHEADER bmiHeader; 
   RGBQUAD          bmiColors[1]; 
} BITMAPINFO;

Define las dimensiones y la información sobre el color para un mapa de bits independiente del dispositivo (DIB).

Descripción

bmiHeader: especifica una estructura BITMAPINFOHEADER que contiene información sobre las dimensiones y formato de color de un DIB.

bmiColors: especifica un array de RGBQUAD o datos de doble palabra que define los colores del mapa de bits.

Observaciones

Un mapa de bits independiente del dispositivo (DIB) se compone de dos partes diferenciadas: una estructura BITMAPINFO, que describe las dimensiones y colores de un mapa de bits, y un array de bytes que definen los pixels del mapa de bits. Los bits del array están empaquetados juntos, pero cada línea se completa con ceros para completar un dato de tipo LONG. Si la altura es positiva, el mapa de bits es un DIB de abajo-arriba y su origen es la esquina inferior izquierda. Si la altura es negativa, el mapa de bits es un DIB de arriba-abajo y su origen es la esquina superior izquierda.

El miembro biBitCount de la estructura BITMAPINFOHEADER determina el número de bits que definen cada pixel y el máximo número de colores en el mapa de bits. Este miembro puede ser uno de los siguientes valores:

Valor Significado
1 El mapa de bits es monocromático, y el miembro bmiColors contiene dos entradas. Cada bit en el mapa de bits representa un pixel. Si el bit es cero, el pixel se mostrará con el color de la primera entrada en la tabla bmiColors; si el bit es activo, el color del pixel será el de la segunda entrada en la tabla.
4 El mapa de bits tendrá un máximo de 16 colores, y el miembro bmiColors contiene 16 entradas. Cada pixel en el mapa de bits se representa con un índice de 4-bit dentro de la tabla de colores. Por ejemplo, si el primer byte del mapa de bits es 0x1F, el byte representa dos pixels. El primer pixel será del color de la segunda entrada y el segundo pixel será del color de la entrada decimosexta.
8 El mapa de bits tendrá un máximo de 256 colores, y el miembro bmiColors contiene 256 entradas. En este caso, cada byte en el array representa un pixel.
16 El mapa de bits tiene un máximo de 2(16) colores. Si el miembro biCompression de la estructura BITMAPINFOHEADER es BI_RGB, el miembro bmiColors es NULL. Cada WORD en el array del mapa de bits representa un pixel. Las intensidades relativas de rojo, verde y azul se representa mediante 5 bits para cada componente de color. El valor de azul son corresponde a los 5 bits de menor peso, siguen los 5 bits para el verde y el rojo, respectivamente. El bit más significativo no se usa.
Si el miembro biCompression de la estructura BITMAPINFOHEADER es BI_BITFIELDS, el miembro bmiColors contiene tres máscaras de color DWORD que especifican las componentes de rojo, verde y azul, respectivamente, para cada pixel. Cada WORD dentro del array del mapa de bits representa un pixel.
Windows NT: cuando el miembro biCompression es BI_BITFIELDS, los bits activos en cada máscara DWORD deben ser contiguos y no pueden superponerse a los bits de otra máscara. No es necesario que todos los bits de un pixel se usen.
Windows 95: cuando el miembro biCompression es BI_BITFIELDS, Windows 95 soporta sólo las siguientes máscaras de color de 16bpp: Una imagen 5-5-5 16-bit, donde la máscara azul es 0x001F, la verde 0x03E0, y la roja 0x7C00; y una imagen 5-6-5 16-bit, donde la máscara azul es 0x001F, la verde 0x07E0, y la roja 0xF800.
24 El mapa de bits tiene un máximo de 2 (24) colores y el miembro bmiColors es NULL. Cada triplete de 3-byte en el array del mapa de bits representa la intensidad relativa de azul, verde y rojo, respectivamente, para un pixel.
32 El mapa de bits tiene un máximo de 2 (32) colores. SI el miembro biCompression de BITMAPINFOHEADER es BI_RGB, el miembro bmiColors es NULL. Cada DWORD del array en el mapa de bit representa las intensidades relativas de azul, verde y rojo, respectivamente, para un pixel. El byte de mayor peso de cada DWORD no se usa.
Si el miembro biCompression de BITMAPINFOHEADER es BI_BITFIELDS, el miembro bmiColors contiene tres máscaras de color DWORD que especifican las componentes de rojo, verde y azul, respectivamente, de cada pixel. Cada DWORD en el array del mapa de bits representa a un pixel.
Windows NT: Cuando el miembro biCompression es BI_BITFIELDS, los bits activos en cada máscara DWORD deben ser contiguos y no deben superponerse a los bits de otras máscaras. No es necesario que se usen todos los bits de cada pixel.
Windows 95: Cuando el miembro biCompression es BI_BITFIELDS, Windows 95 soporta sólo las siguientes máscaras de color de 32bpp: La máscara azul es 0x000000FF, la verde 0x0000FF00 y la roja 0x00FF0000.

El miembro biClrUsed de la estructura BITMAPINFOHEADER especifica el número de índices de color en la tabla de colores que se usa actualmente por el mapa de bits. Si el miembro biClrUsed es cero, el mapa de bits usa el máximo número de colores correspondiente al valor del miembro biBitCount.

Los colores en la tabla bmiColors deben aparecer en orden de importancia.

Alternativamente, para funciones que usan DIBs, el miembro bmiColors puede ser un array de enteros sin signo de 16-bit que especifican índices dentro de la paleta lógica actual en lugar de valores RGB explícitos. En este caso, una aplicación que use mapas de bits debe llamar a funciones DIB (CreateDIBitmap, CreateDIBPatternBrush y CreateDIBSection) con el valor DIB_PAL_COLORS para el parámetro iUsage.

Si el mapa de bits está empaquetado (un mapa de bits en el cual el array de mapa de bits sigue inmediatamente a la cabecera BITMAPINFO y esta referenciado por un puntero sencillo), el miembro biClrUsed debe ser puesto a un número par cuando se use el modo DIB_PAL_COLORS ya que el array del mapa de bits BID comienza con un alineamiento de doble palabra.

Nota: el miembro bmiColors no contiene índices de paleta si el mapa de bits se almacena en un fichero o se transfiere a otra aplicación. Salvo que la aplicación tenga el uso exclusivo y el control del mapa de bits, su tabla de colores debe contener valores RGB explícitos.