Microsoft DirectX 9.0

BITMAPINFOHEADER Structure

The BITMAPINFOHEADER structure contains information about the dimensions and color format of a device-independent bitmap (DIB).

Note   This structure is fully described in the Microsoft® Platform SDK. This entry is included in the DirectShow documentation for quick reference.

Syntax

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;

Members

biSize

Specifies the number of bytes required by the structure.

biWidth

Specifies the width of the bitmap.

Decoders and video sources should propose formats where biWidth is the width of the image. If the video renderer is using DirectDraw, it modifies the format so that biWidth equals the stride of the surface, and the rcTarget member of the VIDEOINFOHEADER or VIDEOINFOHEADER2 structure specifies the image width. Then it proposes the modified format using IPin::QueryAccept.

For RGB and even-power-of-2 YUV formats, if the video renderer does not specify the stride, then round the width up to the nearst DWORD boundardy to find the stride.

biHeight

Specifies the height of the bitmap, in pixels.

biPlanes

Specifies the number of planes for the target device. This value must be set to 1.

biBitCount

Specifies the number of bits per pixel. 

biCompression

If the bitmap is compressed, this member is a FOURCC the specifies the compression. For uncompressed formats, the following values are possible:

Value Description
BI_RGB Uncompressed RGB.
BI_BITFIELDS Uncompressed RGB with color masks. Valid for 16-bpp and 32-bpp bitmaps.

See Remarks for more information.

biSizeImage

Specifies the size, in bytes, of the image. This can be set to 0 for uncompressed RGB bitmaps.

biXPelsPerMeter

Specifies the horizontal resolution, in pixels per meter, of the target device for the bitmap.

biYPelsPerMeter

Specifies the vertical resolution, in pixels per meter, of the target device for the bitmap.

biClrUsed

Specifies the number of color indices in the color table that are actually used by the bitmap.

biClrImportant

Specifies the number of color indices that are considered important for displaying the bitmap. If this value is zero, all colors are important.

Remarks

If the bitmap is 8-bpp or less, the bitmap uses a color table, which immediately follows the BITMAPINFOHEADER. The color table consists of an array of RGBQUAD values. The size of the array is given by the biClrUsed member. If biClrUsed is zero, the array contains the maximum number of colors for the given bitdepth; that is, 2^biBitCount colors.

If biCompression equals BI_BITFIELDS, bitmap uses three DWORD color masks (red, green, and blue, respectively), which specify the byte layout of the pixels. The 1 bits in each mask indicate the bits for that color within the pixel.

For 16-bpp bitmaps, if biCompression equals BI_RGB, the format is RGB 555. If biCompression equals BI_BITFIELDS, the format is either RGB 555 or RGB 565. Use the subtype GUID in the AM_MEDIA_TYPE structure to determine the specific RGB type.

For compressed or YUV types the FOURCC value is specified as a DWORD in little-endian order. For example, YUYV would be 'VYUY' or 0x56595559. For more information, see FOURCC Codes.

In cases where the BITMAPINFOHEADER is followed by a color table or a set of color masks, you can use the BITMAPINFO structure to reference the color table of the color masks. The BITMAPINFO structure is defined as follows:

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

If you cast the BITMAPINFOHEADER to a BITMAPINFO, the bmiHeader member refers to the BITMAPINFOHEADER and the bmiColors member refers to the first entry in the color table, or the first color mask.

Be aware that if the bitmap uses a color table or color masks, then the size of the entire format structure (the BITMAPINFOHEADER plus the color information) is not equal to sizeof(BITMAPINFOHEADER) or sizeof(BITMAPINFO). You must calculate the actual size for each instance.

See Also