BITMAPINFO结构定义了与Windows设备无关的位图(DIB)的维度和颜色信息。
typedef struct tagBITMAPINFO { // bmi
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
会员
bmiHeader
指定一个BITMAPINFOHEADER结构,其中包含有关DIB的尺寸和颜色格式的信息。
bmiColors
指定定义位图中颜色的RGBQUAD或双字数据类型的数组。
备注
与设备无关的位图由两个不同的部分组成:描述位图的尺寸和颜色的BITMAPINFO结构以及定义位图像素的字节数组。阵列中的位打包在一起,但每条扫描线必须用零填充才能在LONG数据类型边界上结束。如果高度为正,则位图是自下而上的DIB,其原点是左下角。如果高度为负,则位图是自顶向下的DIB,其原点是左上角。
BITMAPINFOHEADER结构的biBitCount成员决定了位图中定义每个像素的位数和最大颜色数。该成员可以是以下值之一:
值 | 含义 |
1 | 位图是单色的,bmiColors成员包含两个条目。位图数组中的每一位表示一个像素。如果该位清除,则以bmiColors表中第一个条目的颜色显示像素;如果该位被设置,则该像素具有表中第二条目的颜色。 |
4 | 位图最多有16种颜色,bmiColors成员最多包含16个条目。位图中的每个像素由颜色表中的4位索引表示。例如,如果位图中的第一个字节为0x1F,则该字节表示两个像素。第一像素包含第二表条目中的颜色,第二像素包含第十六表条目中的颜色。 |
8 | 位图最多有256种颜色,bmiColors成员最多包含256个条目。在这种情况下,阵列中的每个字节表示单个像素。 |
16 | 位图最多有2 ^ 16种颜色。如果BITMAPINFOHEADER成员BITMAPINFOHEADER为BI_RGB,则bmiColors成员为NULL。位图数组中的每个WORD表示单个像素。红色,绿色和蓝色的相对强度由每个颜色分量的5位表示。蓝色的值为最低有效5位,后面分别为绿色和红色5位。最高有效位未被使用。 如果BITMAPINFOHEADER的BITMAPINFOHEADER成员是BI_BITFIELDS,则bmiColors成员包含三个DWORD颜色掩码,分别指定每个像素的红色,绿色和蓝色成分。位图数组中的每个WORD表示单个像素。 Windows NT:当biCompression成员为BI_BITFIELDS时,每个DWORD掩码中设置的位必须是连续的,并且不应与另一个掩码的位重叠。像素中的所有位都不必使用。 Windows 95:当biCompression成员为BI_BITFIELDS时,Windows 95仅支持以下16bpp颜色掩码:5-5-5 16位图像,其中蓝色掩码为0x001F,绿色掩码为0x03E0,红色掩码是0x7C00;和5-6-5 16位图像,其中蓝色掩码为0x001F,绿色掩码为0x07E0,红色掩码为0xF800。 |
24 | 位图最多有2 ^ 24种颜色,而bmiColors成员为NULL。位图阵列中的每个3字节三元组分别表示像素的蓝色,绿色和红色的相对强度。 |
32 | 位图最多有2 ^ 32种颜色。如果BITMAPINFOHEADER成员BITMAPINFOHEADER为BI_RGB,则bmiColors成员为NULL。位图数组中的每个DWORD分别表示像素的蓝色,绿色和红色的相对强度。不使用每个DWORD中的高字节。 如果BITMAPINFOHEADER的BITMAPINFOHEADER成员是BI_BITFIELDS,则bmiColors成员包含三个DWORD颜色蒙版,分别指定每个像素的红色,绿色和蓝色组件。位图数组中的每个DWORD都代表一个像素。 Windows NT:当biCompression成员为BI_BITFIELDS时,每个DWORD掩码中设置的位必须是连续的,并且不应与另一个掩码的位重叠。像素中的所有位都不必使用。 Windows 95:当biCompression成员为BI_BITFIELDS时,Windows 95仅支持以下32bpp颜色掩码:蓝色掩码为0x000000FF,绿色掩码为0x0000FF00,红色掩码为0x00FF0000。 |
BITMAPINFOHEADER结构的biClrUsed成员指定了位图实际使用的颜色表中的颜色索引数。如果biClrUsed成员设置为零,则位图使用与biBitCount成员的值对应的最大颜色数。
bmiColors表格中的颜色应按重要程度排列。
或者,对于使用DIB的函数,bmiColors成员可以是16位无符号整数的数组,其指定当前实现的逻辑调色板中的索引,而不是显式RGB值。在这种情况下,使用位图的应用程序必须调用DIB函数(CreateDIBitmap,CreateDIBPatternBrush和CreateDIBSection),并将【iUsage】参数设置为DIB_PAL_COLORS。
如果位图是一个打包位图(bitmap数组紧随BITMAPINFO标题并由单个指针引用的位图),那么当使用DIB_PAL_COLORS模式时,biClrUsed成员必须设置为偶数DIB位图数组以双字边界开始。
注意如果位图要存储在文件中或转移到另一个应用程序,bmiColors成员不应包含调色板索引。除非应用程序具有独占使用和位图的控制,否则位图颜色表应包含显式的RGB值。
也可以看看
BITMAPINFOHEADER, CreateDIBitmap, CreateDIBPatternBrush, CreateDIBSection, RGBQUAD