Estructura BITMAPINFOHEADER (wingdi.h)

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

La estructura BITMAPINFOHEADER contiene información sobre las dimensiones y el formato de color de un mapa de bits independiente del dispositivo (DIB).

Nota Esta estructura también se describe en la documentación de GDI. Sin embargo, la semántica de los datos de vídeo es ligeramente diferente a la semántica usada para GDI. Si usa esta estructura para describir los datos de vídeo, use la información que se proporciona aquí.
 

Sintaxis

typedef struct tagBITMAPINFOHEADER {
  DWORD biSize;
  LONG  biWidth;
  LONG  biHeight;
  WORD  biPlanes;
  WORD  biBitCount;
  DWORD biCompression;
  DWORD biSizeImage;
  LONG  biXPelsPerMeter;
  LONG  biYPelsPerMeter;
  DWORD biClrUsed;
  DWORD biClrImportant;
} BITMAPINFOHEADER, *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;

Miembros

biSize

Especifica el número de bytes requeridos por la estructura. Este valor no incluye el tamaño de la tabla de colores ni el tamaño de las máscaras de color, si se anexan al final de la estructura. Vea la sección Comentarios.

biWidth

Especifica el ancho del mapa de bits, en píxeles. Para obtener información sobre cómo calcular el intervalo del mapa de bits, vea Comentarios.

biHeight

Especifica el alto del mapa de bits, en píxeles.

  • En el caso de los mapas de bits RGB sin comprimir, si biHeight es positivo, el mapa de bits es una DIB de abajo arriba con el origen en la esquina inferior izquierda. Si biHeight es negativo, el mapa de bits es una DIB de arriba abajo con el origen en la esquina superior izquierda.
  • En el caso de los mapas de bits YUV, el mapa de bits siempre está en la parte superior, independientemente del signo de biHeight. Los descodificadores deben ofrecer formatos YUV con biHeight positivo, pero para la compatibilidad con versiones anteriores deben aceptar formatos YUV con biHeight positivo o negativo.
  • En el caso de los formatos comprimidos, biHeight debe ser positivo, independientemente de la orientación de la imagen.

biPlanes

Especifica el número de planos para el dispositivo de destino. Este valor debe establecerse en 1.

biBitCount

Especifica el número de bits por píxel (bpp). En el caso de los formatos sin comprimir, este valor es el número medio de bits por píxel. En el caso de los formatos comprimidos, este valor es la profundidad de bits implícita de la imagen sin comprimir, una vez descodificada la imagen.

biCompression

En el caso de los formatos de vídeo comprimido y YUV, este miembro es un código FOURCC, especificado como DWORD en orden little-endian. Por ejemplo, el vídeo YUYV tiene el FOURCC "VYUY" o 0x56595559. Para obtener más información, vea FOURCC Codes.

En el caso de los formatos RGB sin comprimir, son posibles los siguientes valores:

Valor Significado
BI_RGB
RGB sin comprimir.
BI_BITFIELDS
RGB sin comprimir con máscaras de color. Válido para mapas de bits de 16 bpp y 32 bpp.
 

Vea Comentarios para obtener más información. Tenga en cuenta que BI_JPG y BI_PNG no son formatos de vídeo válidos.

Para los mapas de bits de 16 bpp, si biCompression es igual a BI_RGB, el formato siempre es RGB 555. Si biCompression es igual a BI_BITFIELDS, el formato es RGB 555 o RGB 565. Use el GUID de subtipo en la estructura AM_MEDIA_TYPE para determinar el tipo RGB específico.

biSizeImage

Especifica el tamaño, en bytes, de la imagen. Esto se puede establecer en 0 para mapas de bits RGB sin comprimir.

biXPelsPerMeter

Especifica la resolución horizontal, en píxeles por medidor, del dispositivo de destino para el mapa de bits.

biYPelsPerMeter

Especifica la resolución vertical, en píxeles por medidor, del dispositivo de destino para el mapa de bits.

biClrUsed

Especifica el número de índices de color de la tabla de colores que realmente usa el mapa de bits. Vea Comentarios para obtener más información.

biClrImportant

Especifica el número de índices de color que se consideran importantes para mostrar el mapa de bits. Si este valor es cero, todos los colores son importantes.

Comentarios

Tablas de colores

La estructura BITMAPINFOHEADER puede ir seguida de una matriz de entradas de paleta o máscaras de color. Las reglas dependen del valor de biCompression.
  • Si biCompression es igual a BI_RGB y el mapa de bits usa 8 bpp o menos, el mapa de bits tiene una tabla de colores inmediatamente después de la estructura BITMAPINFOHEADER . La tabla de colores consta de una matriz de valores RGBQUAD . El tamaño de la matriz lo da el miembro biClrUsed . Si biClrUsed es cero, la matriz contiene el número máximo de colores para el bitdepth especificado; es decir, colores de 2^biBitCount .
  • Si biCompression es igual a BI_BITFIELDS, el mapa de bits usa tres máscaras de color DWORD (rojo, verde y azul, respectivamente), que especifican el diseño de bytes de los píxeles. Los 1 bits de cada máscara indican los bits de ese color dentro del píxel.
  • Si biCompression es un vídeo FOURCC, la presencia de una tabla de colores está implícita en el formato de vídeo. No debe suponer que existe una tabla de colores cuando la profundidad de bits es de 8 bpp o menos. Sin embargo, algunos componentes heredados pueden suponer que existe una tabla de colores. Por lo tanto, si va a asignar una estructura BITMAPINFOHEADER , se recomienda asignar espacio para una tabla de colores cuando la profundidad de bits es de 8 bpp o menos, incluso si no se usa la tabla de colores.
Cuando BITMAPINFOHEADER va seguido de una tabla de colores o un conjunto de máscaras de color, puede usar la estructura BITMAPINFO para hacer referencia a la tabla de colores de las máscaras de color. La estructura BITMAPINFO se define de la siguiente manera:
typedef struct tagBITMAPINFO {
    BITMAPINFOHEADER bmiHeader;
    RGBQUAD          bmiColors[1];
} BITMAPINFO;

Si convierte el BITMAPINFOHEADER en un BITMAPINFO, el miembro indexHeader hace referencia al bitMAPINFOHEADER y el miembro indexColors hace referencia a la primera entrada de la tabla de colores o a la primera máscara de color.

Tenga en cuenta que si el mapa de bits usa una tabla de colores o máscaras de color, el tamaño de toda la estructura de formato ( BITMAPINFOHEADER más la información de color) no es igual a sizeof(BITMAPINFOHEADER) o sizeof(BITMAPINFO). Debe calcular el tamaño real de cada instancia.

Calcular el paso de superficie

En un mapa de bits sin comprimir, el intervalo es el número de bytes necesarios para pasar desde el inicio de una fila de píxeles hasta el inicio de la fila siguiente. El formato de imagen define un intervalo mínimo para una imagen. Además, el hardware gráfico puede requerir un paso mayor para la superficie que contiene la imagen.

En el caso de los formatos RGB sin comprimir, el intervalo mínimo es siempre el ancho de la imagen en bytes, redondeado al DWORD más cercano. Para calcular el tamaño de la imagen y el intervalo, puede usar las macros de GDI_DIBWIDTHBYTES o GDI_DIBSIZE , o bien la fórmula siguiente:

stride = ((((biWidth * biBitCount) + 31) & ~31) >> 3);
biSizeImage = abs(biHeight) * stride;

En el caso de los formatos YUV, no hay ninguna regla general para calcular el intervalo mínimo. Debe comprender las reglas para el formato YUV determinado. Para obtener una descripción de los formatos YUV más comunes, consulte Formatos YUV recomendados de 8 bits para la representación de vídeo.

Los descodificadores y los orígenes de vídeo deben proponer formatos en los que biWidth es el ancho de la imagen en píxeles. Si el representador de vídeo requiere un paso de superficie mayor que el intervalo de imagen predeterminado, modifica el tipo de medio propuesto estableciendo los valores siguientes:

  • Establece biWidth igual al paso de la superficie en píxeles.
  • Establece el miembro rcTarget de la estructura VIDEOINFOHEADER o VIDEOINFOHEADER2 igual al ancho de la imagen, en píxeles.
A continuación, el representador de vídeo propone el formato modificado llamando a IPin::QueryAccept en la patilla ascendente. Para obtener más información sobre este mecanismo, consulte Cambios de formato dinámico.

Si hay relleno en el búfer de imágenes, nunca desreferencia un puntero en la memoria que se ha reservado para el relleno. Si el búfer de imágenes se ha asignado en memoria de vídeo, es posible que el relleno no sea memoria legible.

Requisitos

   
Encabezado wingdi.h

Consulte también

Estructuras directShow

VIDEOINFOHEADER (estructura)

estructura de VIDEOINFOHEADER2

Trabajar con fotogramas de vídeo