位图标头类型

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

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

BITMAPV5HEADER 结构是扩展的 BITMAPV4HEADER 结构,后者是扩展的 BITMAPINFOHEADER 结构。 但是,BITMAPINFOHEADERBITMAPCOREHEADER 只有 Size 成员与其他位图标头结构相同。

BITMAPCOREHEADERBITMAPV4HEADER 格式已分别被 BITMAPINFOHEADERBITMAPV5HEADER 格式取代。 BITMAPCOREHEADERBITMAPV4HEADER 格式可实现完整性和向后兼容性。

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

颜色表描述像素值与 RGB 颜色值的对应关系。 RGB 模型用于描述通过所发出的光生成的颜色。

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

配置文件数据仅适用于 BITMAPV5HEADER 结构,其中 bV5CSType 是 PROFILE_LINKED 或 PROFILE_EMBEDDED。 对于接收打包的 DIB 的函数,配置文件数据位于位图数据之后。

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

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

16-bpp、24-bpp 或 32-bpp 位图不需要颜色表,但可能会使用颜色表来指定调色设备的颜色。 如果 16-bpp、24-bpp 或 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 个像素将是显示或打印图像的第 9 个扫描行的第 0 个像素。 运行长度编码 (RLE) 格式的位图和 BITMAPCOREHEADER 位图不能采用自上而下的格式。 扫描行为 DWORD 对齐,RLE 压缩位图除外。 必须针对扫描行宽(以字节为单位)进行填充,这些宽度不能被四整除,RLE 压缩位图除外。 例如,10 x 10 像素的 24-bpp 位图将在每个扫描行的末尾带有两个填充字节。