GDI+只在内存DC上绘制单色

GDI+ only draws monochrome on memory DC

本文关键字:绘制 单色 DC 内存 GDI+      更新时间:2023-10-16

我正在尝试在MFC应用程序中进行一些双重缓冲,并尝试使用GDI+绘制内存DC。然而,尽管我调用了CreateCompatibleDC(),但我得到的只是单色图像。这是代码:

CDC bufferDC;
CBitmap bufferBitmap;
bufferDC.CreateCompatibleDC(&dc);
bufferBitmap.CreateCompatibleBitmap(&bufferDC, 300, 300);
bufferDC.SelectObject(bufferBitmap);
Graphics g(bufferDC);
g.Clear(Color::Green);
dc.BitBlt(0, 0, 300, 300, &bufferDC, 0, 0, SRCCOPY);

我看到的不是一块绿色的补丁,而是一个由抖动的黑白点组成的矩形。我甚至试着在g.Clear()调用后将位图保存到磁盘上。它确实是一个1位深度文件。

有什么问题吗?谢谢

一个常见的错误。内存DC采用所选位图的属性,无论创建时使用何种兼容性。DC中选择的默认位图为单色。如果您创建一个与该DC兼容的位图,它也将是单色的。

创建位图以与原始DC兼容,而不是与内存DC兼容。

bitnmap和bufferDC都应该与dc(无论它指的是什么设备)兼容,而不是位图兼容。。。具有自己的DC。

尝试将&dc赋予CreateCopmpatibleBitmap

您的代码片段没有显示dc变量的来源。这家伙可能包含一个单色位图,默认值。你根本不需要它。相反,将NULL传递给CreateCompatibleDC,它将与您的显示格式相同,可能是彩色的。