本文共 1819 字,大约阅读时间需要 6 分钟。
设备无关位图即独立于设备的位图(DIB)与“”相比,它不再依赖于具体的设备,从而更适合在不同的计算机之间传输和显示。它包含一个颜色表,颜色表描述像素值如何对应于RGB颜色值,其描述通过发光产生的颜色。因此,DIB可以在任何设备上实现适当的配色方案。DIB包含以下颜色和尺寸信息:
颜色格式是根据颜色平面和色彩位数计算的。彩色飞机总数为1;对于单色位图,彩色位的计数为1,VGA位图为4,对于其他颜色设备的位图为8,16,24或32。应用程序通过调用GetDeviceCaps函数检索特定显示(或打印机)使用的颜色位数,将BITSPIXEL指定为第二个参数。
显示设备的分辨率以像素/米为单位指定。应用程序可以通过以下三个步骤来检索视频显示器或打印机的水平分辨率。
调色板由RGBQUAD结构数组表示,它们在显示设备的调色板中为每个颜色指定了红色,绿色和蓝色强度分量。调色板阵列中的每个颜色索引映射到与位图相关联的矩形区域中的特定像素。该数组的大小(以位为单位)等于矩形的宽度(以像素为单位)乘以矩形的高度(以像素为单位)乘以设备的颜色位数。应用程序可以通过调用GetDeviceCaps函数来检索设备调色板的大小,并将NUMCOLORS指定为第二个参数。
Windows支持8-bpp和4-bpp自下而上DIB的调色板阵列的压缩。可以使用游程长度编码(RLE)方案来压缩这些阵列。RLE方案使用2字节值,第一个字节指定使用颜色索引的连续像素数,第二个字节指定索引。有关位图压缩的更多信息,请参阅BITMAPINFOHEADER,BITMAPFILEHEADER,BITMAPV4HEADER和BITMAPV5HEADER结构的说明。
应用程序可以通过初始化所需的结构并调用GetDIBits函数从DDB创建DIB。要确定设备是否支持此功能,请调用GetDeviceCaps函数,将RC_DI_BITMAP指定为RASTERCAPS标志。
需要复制位图的应用程序可以使用TransparentBlt将源位图中的所有像素复制到目标位图,除了与透明颜色匹配的像素。
应用程序可以使用DIB通过调用SetDIBitsToDevice或StretchDIBits函数来设置显示设备上的像素。要确定设备是否支持SetDIBitsToDevice功能,请调用GetDeviceCaps函数,将RC_DIBTODEV指定为RASTERCAPS标志。将RC_STRETCHDIB指定为RASTERCAPS标志,以确定设备是否支持StretchDIBits。
只需要显示一个预先存在的DIB的应用程序就可以使用SetDIBitsToDevice函数。例如,电子表格应用程序可以打开现有的图表,并通过使用SetDIBitsToDevice函数将其显示在窗口中。然而,要在窗口中重复重绘位图,应用程序应使用BitBlt函数。例如,将动画图形与声音结合在一起的多媒体应用程序将受益于调用BitBlt函数,因为它执行速度比SetDIBitsToDevice快。
原文:
相关阅读:
转载地址:http://iagjx.baihongyu.com/