内存设备上下文
若要使应用程序能够将输出置于内存中,而不是将其发送到实际设备,请使用特殊的设备上下文进行位图操作,称为 内存设备上下文。 内存 DC 使系统能够将部分内存视为虚拟设备。 它是内存中的一个位数组,应用程序可以暂时使用该数组来存储在普通绘图图面上创建的位图的颜色数据。 由于位图与设备兼容,因此内存 DC 有时也称为 兼容的设备上下文。
内存 DC 存储特定设备的位图图像。 应用程序可以通过调用 CreateCompatibleDC 函数来创建内存 DC。
内存 DC 中的原始位图只是占位符。 其尺寸是一个像素乘以一个像素。 应用程序必须通过调用 SelectObject 函数来选择具有适当宽度和高度的位图,然后应用程序才能开始绘制 DC。 若要创建相应维度的位图,请使用 CreateBitmap、 CreateBitmapIndirect 或 CreateCompatibleBitmap 函数。 将位图选入内存 DC 后,系统会将单位数组替换为足够大的数组,以存储指定像素矩形的颜色信息。
当应用程序将 CreateCompatibleDC 返回的句柄传递给绘图函数之一时,请求的输出不会显示在设备的绘图图面上。 相反,系统会将生成的线条、曲线、文本或区域的颜色信息存储在位数组中。 应用程序可以通过调用 BitBlt 函数,将内存 DC 标识为源设备上下文,将窗口或屏幕 DC 标识为目标设备上下文,将存储在内存中的图像复制回绘图图面。
在调色板设备上显示 DIB 或从 DIB 创建的 DDB 时,可以通过排列逻辑调色板以匹配系统调色板的布局来提高图像的绘制速度。 为此,请使用 NUMRESERVED 值调用 GetDeviceCaps 以获取系统中的保留颜色数。 然后调用 GetSystemPaletteEntries ,并使用相应的系统颜色填充逻辑调色板的第一个和最后一个 NUMRESERVED/2 条目。 例如,如果 NUMRESERVED 为 20,则使用系统颜色填充逻辑调色板的第一个和最后 10 个条目。 然后在示例中填充逻辑调色板 (的剩余 256-NUMRESERVED 颜色,其余 236 种颜色) DIB 中的颜色,并在每种颜色上设置PC_NOCOLLAPSE标志。
有关颜色和调色板的详细信息,请参阅 颜色。 有关位图和位图操作的详细信息,请参阅 位图。