位图标头类型

位图有四种基本标头类型:

四种类型的位图标头由 Size 成员区分,该成员是每个结构中的第一个 DWORD

BITMAPV5HEADER 结构是扩展的 BITMAPV4HEADER 结构,它是扩展的 BITMAPINFOHEADER 结构。 但是, BITMAPINFOHEADERBITMAPCOREHEADER 仅具有与其他位图标头结构共同的 Size 成员。

BITMAPCOREHEADERBITMAPV4HEADER 格式已分别由 BITMAPINFOHEADERBITMAPV5HEADER 格式取代。 提供 BITMAPCOREHEADERBITMAPV4HEADER 格式以实现完整性和向后兼容性。

DIB 的格式如下 (有关详细信息,请参阅 位图存储 ) :

颜色表描述像素值如何对应于 RGB 颜色值。 RGB 是用于描述由发射光产生的颜色的模型。

配置文件数据 是指链接配置文件) (配置文件文件名,或嵌入配置文件) (实际配置文件位。 文件格式将配置文件数据放在文件的末尾。 配置文件数据放置在颜色表 ((如果存在) )后面。 但是,如果函数收到打包的 DIB,则配置文件数据将位于位图位之后,例如文件格式。

配置文件数据仅存在于 bV5CSType PROFILE_LINKED或PROFILE_EMBEDDED的 BITMAPV5HEADER 结构中。 对于接收打包的 DIB 的函数,配置文件数据将排在位图数据之后。

淡化设备是使用调色板分配颜色的任何设备。 淡化设备的经典示例是以 8 位颜色深度 (即 256 种颜色) 运行的显示器。 此模式下的显示器使用小型颜色表将颜色分配给位图。 位图中的颜色分配给设备正在使用的调色板中最接近的颜色。 Palettized 设备无法创建用于显示位图的最佳调色板;它只是使用当前调色板中的任意组件。 应用程序负责创建调色板并将其选中到系统中。 通常,每像素 16 位、24 位和 32 位 (bpp) 位图不包含颜色表 (位图) 的最佳调色板;在这种情况下,应用程序负责生成最佳调色板。 但是,16、24 和 32-bpp 位图可以包含此类最佳颜色表,以便在淡化设备上显示:在这种情况下,应用程序只需基于位图文件中存在的颜色表创建调色板。

1、4 或 8 bpp 的位图必须具有基于 bpp 的最大大小的颜色表。 1、4 和 8 bpp 位图的最大大小为 2 到 bpp 的幂。 因此,1 bpp 位图最多有两种颜色,4 bpp 位图最多有 16 种颜色,8 bpp 位图最多有 256 种颜色。

16、24 或 32 bpp 的位图不需要颜色表,但可能具有这些颜色表来指定淡化设备的颜色。 如果颜色表存在 16、24 或 32 bpp 位图, 则 biClrUsed 成员指定颜色表的大小,并且颜色表必须具有该颜色。 如果 biClrUsed 为零,则没有颜色表。

BI_BITFIELD位图的红色、绿色和蓝色位域掩码紧跟在 BITMAPINFOHEADERBITMAPV4HEADERBITMAPV5HEADER 结构之后。 BITMAPV4HEADERBITMAPV5HEADER 结构包含红色、绿色和蓝色掩码的附加成员,如下所示。

成员 含义
RedMask 指定每个像素的红色分量的颜色掩码,仅当 Compression 成员设置为 BI_BITFIELDS 时有效。
GreenMask 指定每个像素的绿色分量的颜色掩码,仅当 Compression 成员设置为 BI_BITFIELDS 时有效。
BlueMask 指定每个像素的蓝色分量的颜色掩码,仅当 Compression 成员设置为 BI_BITFIELDS 时有效。

 

BITMAPINFOHEADERbiCompression 成员设置为 BI_BITFIELDS 并且函数收到类型为 LPBITMAPINFO 的参数时,颜色掩码将紧跟在标头后面。 颜色表(如果存在)将遵循颜色掩码。 BITMAPCOREHEADER 位图不支持颜色掩码。

默认情况下,位图数据的格式为自下而上。 自下而上意味着位图数据中的第一个扫描行是要显示的最后一个扫描线。 例如,10 像素 x 10 像素位图的位图数据的 0 0 个扫描行的第 0 个像素将是所显示或打印图像的第 9 个扫描行的第 0像素。 运行长度编码 (RLE) 格式位图和 BITMAPCOREHEADER 位图不能是自上而下的位图。 扫描行是 DWORD 对齐的,RLE 压缩位图除外。 它们必须填充扫描线宽(以字节为单位),这些宽度不能均匀地被四除,RLE 压缩位图除外。 例如,10 x 10 像素 24 bpp 位图在每个扫描行的末尾将有两个填充字节。