兼容设备上下文

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

为了使应用程序将输出放在内存中,而不是将其发送到实际的设备,Win32 API为位图操作提供了一个特殊的设备上下文,称为【兼容设备上下文】.兼容的DC使Windows可以将一部分内存视为虚拟设备。它是存储器中的一个位数组,应用程序可以临时使用存储在正常绘图表面上创建的位图的颜色数据。

应用程序通过调用CreateCompatibleDC函数创建一个兼容的DC,并接收一个标识正常设备上下文的句柄。Windows为阵列创建一个临时的1位占位符。在使用兼容的直流手柄执行绘图操作之前,应用程序必须增加该数组的大小。为此,应用程序可以调用CreateBitmapCreateBitmapIndirectCreateCompatibleBitmap函数创建适当维度的位图,然后调用SelectObject功能将位图选择到DC中。在将位图选择到兼容DC中后,Windows将使用足够大的阵列替换单位数组,以便为??指定的像素矩形存储颜色信息。

当应用程序将由CreateCompatibleDC返回的句柄传递到其中一个GDI绘图功能时,请求的输出不会出现在设备的绘图面上。相反,Windows将结果行,曲线,文本或区域的颜色信息存储在位数组中。应用程序可以通过调用BitBlt功能,将兼容DC标识为源设备上下文,将窗口或屏幕DC作为目标设备上下文,将存储在内存中的映像复制回绘图面。

当在调色板设备上显示从DIB创建的DIB或DDB时,可以通过排列逻辑调色板来匹配系统调色板的布局来提高绘制图像的速度。要执行此操作,请使用NUMRESERVED值调用GetDeviceCaps以获取系统中保留颜色的数量。然后调用GetSystemPaletteEntries并使用相应的系统颜色填写逻辑调色板的第一个和最后一个NUMRESERVED / 2条目。例如,如果NUMRESERVED为20,则可以使用系统颜色填写逻辑调色板的第一个和最后10个条目。然后使用DIB中的颜色填写逻辑调色板剩余的256 - NUMRESERVED颜色(在我们的示例中为剩余的236种颜色),并在每种颜色上设置PC_NOCOLLAPSE标志。有关颜色和调色板的更多信息,请参阅颜色.