鱼C论坛

 找回密码
 立即注册
查看: 3727|回复: 0

[API档案] BITMAPINFOHEADER 结构

[复制链接]
发表于 2016-3-30 03:07:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
注:本文档由 Diu 翻译,小甲鱼校对。

BITMAPINFOHEADER 结构

BITMAPINFOHEADER 结构包含一个 DIB(设备无关位图)维度和颜色格式的相关信息。


结构原型:

  1. typedef struct tagBITMAPINFOHEADER {
  2.   DWORD biSize;
  3.   LONG  biWidth;
  4.   LONG  biHeight;
  5.   WORD  biPlanes;
  6.   WORD  biBitCount;
  7.   DWORD biCompression;
  8.   DWORD biSizeImage;
  9.   LONG  biXPelsPerMeter;
  10.   LONG  biYPelsPerMeter;
  11.   DWORD biClrUsed;
  12.   DWORD biClrImportant;
  13. } BITMAPINFOHEADER, *PBITMAPINFOHEADER;
复制代码


成员解析:

成员 含义
biSize 结构体所占字节数
biWidth 1. 位图的宽度,以像素为单位
2. 如果 biCompression 是 BI_JPEG 或 BI_PNG,biWidth 成员指示压缩的 JPEG 或 PNG 文件的宽度
biHeight1. 位图的高度,以像素为单位
2. 如果 biHeight 是正数,那么位图是一种自下而上的 DIB,并且它的源点是左下角
3. 如果 biHeight 是负数,那么位图是一种自上而下的 DIB,并且它的源点是左上角
4. 如果 biHeight 是负数,表明是一个自上而下的 DIB,biCompression 必须是 BI_RGB 或 BI_BITFIELDS。自上而下的 DIB 不能够被压缩
5. 如果 biCompression 是 BI_JPEG 或 BI_PNG,biHeight 成员指示压缩的 JPEG 或 PNG 文件的高度
biPlanes 指定目标设备平面的数量,这个值必须设置为 1
biBitCount 1. 指定每个像素的位数。
2. BITMAPINFOHEADER 结构中的 biBitCount 成员决定位图中定义每个像素的位数和最大颜色数量。该成员必须为下面值中的一个:
含义
0 表示每像素的位数已经被指定,或者被 JPEG 和 PNG 格式所暗示
1 表示位图是单色的,并且 BITMAPINFO 结构中的 bmiColors 成员包含两个条目。位图数组中的每一位代表一个像素。如果位没有被设置,那么像素显示 bmiColors 表中的第一个条目的颜色;如果位被设置了,那么像素显示表中的第二个条目的颜色
4 表示位图最多有 16 种颜色,并且 BITMAPINFO 结构中的 bmiColors 成员包含 16 个条目。位图中的每个像素是由颜色表中的 4 位索引来表示的。例如,如果位图的第一个字节是 0x1F,那么这个字节代表两个像素。第一个像素包含颜色表中第二个条目的颜色,第二个像素包含颜色表中第 16 个条目的颜色
8 表示位图最多有 256 种颜色,并且 BITMAPINFO 结构中的 bmiColors 成员包含256个条目。这种情况下,位图数组中的每个字节代表一个像素
161. 表示位图最多有 2^16 种颜色。如果 BITMAPINFOHEADER 结构的 biCompression 成员是 BI_RGB,那么 BITMAPINFO 结构的 bmiColors 成员是 NULL。位图数组中的每个字代表一个像素。用 5 位来表示红绿蓝中每个颜色分量的相对强度。蓝色的值是最重要的 5 位,其次是分别表示绿色和红色的 5 位。最重要的位没有被使用。bmiColors 的颜色表被用于优化调色板设备使用的颜色,并且必须包含 BITMAPINFOHEADER 结构的 biClrUsed 成员指定的条目数量
2. 如果 BITMAPINFOHEADER 结构中的 biCompression 成员是 BI_BITFIELDS,那么 bmiColors 成员包含 3 个双字,分别指定每个像素的红,绿,蓝成分。位图数组中的每个字表示单个像素
3. 当 biCompression 成员是 BI_BITFIELDS,设置在每个双字掩码中的位必须是连续的和不应该和另一个掩码的位重叠,不必使用像素的所有位
24 表示位图最多有 2^24 种颜色,并且 BITMAPINFO 结构的 bmiColors 成员为 NULL。位图数组中的每三个字节分别表示每个像素蓝,绿,红颜色成分的相对强度。bmiColors 的颜色表被用于优化调色板设备使用的颜色,并且必须包含 BITMAPINFOHEADER 结构的 biClrUsed 成员指定的条目数量
321. 表示位图最多有 2^32 种颜色。如果 BITMAPINFOHEADER 结构中的 biCompression 成员是 BI_RGB,那么 BITMAPINFO 结构中的 bmiColors 成员为 NULL。位图数组中的每个双字分别表示每个像素蓝,绿,红颜色成分的相对强度。蓝色的值是最重要的 8 位,其次是分别表示绿色和红色的 8 位。每个双字的最高位没有被使用。bmiColors 的颜色表被用于优化调色板设备使用的颜色,并且必须包含 BITMAPINFOHEADER 结构的 biClrUsed 成员指定的条目数量
2. 如果 BITMAPINFOHEADER 结构中的 biCompression 成员是 BI_BITFIELDS,那么 bmiColors 成员包含 3 个双字,分别指定每个像素的红,绿,蓝成分。位图数组中的每个双字表示单个像素
3. 当 biCompression 成员是 BI_BITFIELDS,设置在每个双字掩码中的位必须是连续的和不应该和另一个掩码的位重叠,不必使用像素的所有位
biCompression 1. 为压缩的自下而上的位图指定压缩类型,自上而下的 DIB 不能够被压缩
2. 该成员值可能为下表中的一个:
描述
BI_RGB 一种未压缩格式
BI_RLE8 1. 一种使用 8bpp(像素深度)游程(RLE)编码的位图格式。该压缩格式是一个包含 1 个计数字节和一个表示颜色索引的字节所组成的 2 字节格式
2. 更多内容,请参考 Bitmap Compression
BI_RLE4 1. 一种使用 4bpp(像素深度)游程(RLE)编码的位图格式。该压缩格式是一个包含 1 个计数字节和一个表示 2 字长颜色索引的字节所组成的 2 字节格式
2. 更多内容,请参考 Bitmap Compression
BI_BITFIELDS 表示位图没有被压缩。并且颜色表包含 3 个 DWORD 值,分别标识着每个像素点的红,绿,蓝成分。当使用 16bpp 和 32bpp 位图时,这是有效的
BI_JPEG 表示图片是一个 JPEG 图片
BI_PNG 表示图片是一个 PNG 图片
biSizeImage 1. 图像所占用的字节数,对于 BI_RGB 位图,这个值可以是 0
2. 如果 biCompression 是 BI_JPEG 或 BI_PNG,那么 biSizeImage 分别指示 JPEG 和 PNG 图片缓冲区的大小
biXPelsPerMeter 1. 按每公尺像素数计算,为位图指定目标设备水平分辨率
2. 程序可以使用该值从资源组中选择最符合当前设备特性的位图
biYPelsPerMeter 按每公尺像素数计算,为位图指定目标设备垂直分辨率。
biClrUsed 1. 指定实际在位图中使用的颜色表中的颜色索引的数量。如果该值为 0,位图为 biCompression 指定的压缩模式使用 biBitCount 值对应的最大颜色数量
2. 如果 biClrUsed 非 0,并且 biBitCount 小于 16,biClrUsed 指定图形引擎或设备驱动访问的实际颜色数量。如果 biBitCount 大于等于 16,biClrUsed 成员指定颜色表的数量,用来优化系统颜色调色板性能。如果 biBitCount 等于 16 或 32,最佳颜色调色板紧跟在 3 个双字掩码之后开始
3. 当位图数组紧接着 BITMAPINFO 结构,那么它是一个封装的位图,它被一个单独的指针引用,并且要求 biClrUsed 必须要么为 0,要么为颜色表的实际大小
biClrImportant 显示位图时所需要的颜色索引的数量。如果该值为 0,要求使用所有颜色


备注:

1. BITMAPINFO 结构包含 BITMAPINFOHEADER 结构和一个颜色表来提供对一个 DIB 的维度和颜色的完整定义。

2. 程序应该使用存储在 biSize 中的信息来定位 BITMAPINFO 结构中的颜色表,如下:
  1. pColor = ((LPSTR)pBitmapInfo + (WORD)(pBitmapInfo->bmiHeader.biSize));
复制代码

3. BITMAPINFOHEADER 结构被扩展为允许将 JPEG 或 PNG 图像作为源图像传递给 StretchDIBits 函数。


需求:

Minimum supported client Windows 2000 专业版 [仅桌面应用程序]
Minimum supported server Windows 2000 服务器版 [仅桌面应用程序]
Header Wingdi.h (包含于 Windows.h)


【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 01:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表