内存设备上下文

若要使应用程序能够在内存中放置输出,而不是将其发送到实际设备,请使用特殊的设备上下文进行位图作,称为 内存设备上下文。 内存 DC 使系统能够将部分内存视为虚拟设备。 它是内存中的位数组,应用程序可以使用它临时存储在普通绘图图面上创建的位图的颜色数据。 由于位图与设备兼容,因此内存 DC 有时也称为 兼容的设备上下文

内存 DC 存储特定设备的位图图像。 应用程序可以通过调用 CreateCompatibleDC 函数来创建内存 DC。

内存 DC 中的原始位图只是占位符。 其尺寸是一个像素一个像素。 在应用程序开始绘制之前,它必须通过调用 SelectObject 函数来选择具有适当宽度和高度的位图。 若要创建相应维度的位图,请使用 CreateBitmapCreateBitmapIndirectCreateCompatibleBitmap 函数。 选择位图进入内存 DC 后,系统会将单位数组替换为足够大的数组,以存储指定像素矩形的颜色信息。

当应用程序将 CreateCompatibleDC 返回的句柄传递给其中一个绘图函数时,请求的输出不会显示在设备的绘图图面上。 相反,系统将生成的线条、曲线、文本或区域的颜色信息存储在位数组中。 应用程序可以通过调用 BitBlt 函数将存储在内存中的图像复制回绘图图面,将内存 DC 标识为源设备上下文,并将窗口或屏幕 DC 标识为目标设备上下文。

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

有关颜色和调色板的详细信息,请参阅 颜色。 有关位图和位图作的详细信息,请参阅 位图