设备无关位图

【勇芳软件工作室】汉化HomePreviousNext

DIB包含以下颜色和尺寸信息:

*创建矩形图像的设备的颜色格式。

*创建矩形图像的设备的分辨率。

*创建图像的设备的调色板。

*将红,绿,蓝(RGB)三元组映射到矩形图像中的像素的位数组。

*一个数据压缩标识符,指示用于减少位数组大小的数据压缩方案(如果有的话)。

该信息存储在BITMAPINFO结构中,由BITMAPINFOHEADER结构组成,后面跟着两个或多个RGBQUAD结构。BITMAPINFOHEADER指定像素矩形的尺寸,描述设备的颜色技术,并标识用于减少位图大小的压缩方案。RGBQUAD结构识别出现在像素矩形中的颜色。

DIB有两种:“自下而上”的DIB,其中原点位于左下角,“自上而下”的DIB位于左上角。如果BITMAPINFOHEADER结构biHeight成员所指出的DIB的高度为正值,则为自底向上的DIB;如果高度是负值,则它是自顶向下的DIB。自上而下的DIB无法压缩。

颜色格式是根据颜色平面和色彩位数计算的。彩色飞机总数为1;对于单色位图,彩色位的计数为1,VGA位图为4,对于其他颜色设备的位图为8,16,24或32。应用程序通过调用GetDeviceCaps函数检索特定显示(或打印机)使用的颜色位数,指定BITSPIXEL作为第二个参数。

显示设备的分辨率以每米的像素为单位指定。应用程序可以通过以下三个步骤来检索视频显示器或打印机的水平分辨率:

1.选择GetDeviceCaps函数,指定HORZRES作为第二个参数。

2.再次呼叫GetDeviceCaps,将HORZSIZE指定为第二个参数。

将第一个返回值转换为第二个返回值。

应用程序可以通过使用具有不同参数的相同三步过程来检索垂直分辨率:VERTRES代替HORZRES,VERTSIZE代替HORZSIZE。

调色板由RGBQUAD结构数组表示,它们在显示设备的调色板中为每个颜色指定了红色,绿色和蓝色强度分量。调色板阵列中的每个颜色索引映射到与位图相关联的矩形区域中的特定像素。该数组的大小(以位为单位)等于矩形的宽度(以像素为单位)乘以矩形的高度(以像素为单位)乘以设备的颜色位数。应用程序可以通过调用GetDeviceCaps函数来检索设备调色板的大小,并将NUMCOLORS常量指定为第二个参数。

Win32 API支持对每个像素8位和每像素4位自下而上的DIB进行调色板阵列的压缩。可以使用游程长度编码(RLE)方案来压缩这些阵列。RLE方案使用2字节值,第一个字节指定使用颜色索引的连续像素数,第二个字节指定索引。有关位图压缩的更多信息,请参阅BITMAPINFOHEADER结构的说明。

应用程序可以通过初始化所需的结构并调用GetDIBits函数从DDB创建DIB。要确定设备是否支持此函数,请调用GetDeviceCaps功能,将RC_DI_BITMAP指定为RASTERCAPS标志。

应用程序可以使用DIB通过调用SetDIBitsToDeviceStretchDIBits功能来设置显示设备上的像素。要确定设备是否支持SetDIBitsToDevice功能,请调用GetDeviceCaps功能,指定RC_DIBTODEV作为RASTERCAPS标志。将RC_STRETCHDIB指定为RASTERCAPS标志,以确定设备是否支持StretchDIBits.

只需显示一个预先存在的DIB的应用程序就可以使用SetDIBitsToDevice功能。例如,电子表格应用程序可以打开现有的图表,并通过使用SetDIBitsToDevice功能将其显示在窗口中。但是,要在窗口中重复重绘位图,应用程序应使用BitBlt功能。例如,将动画图形与声音结合在一起的多媒体应用程序将受益于调用BitBlt函数,因为它的执行速度比SetDIBitsToDevice快。