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

时间:2012-02-16 20:53:54

标签: c++ mfc gdi+

我正在尝试在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位深度文件。

任何想法出了什么问题?感谢。

3 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:0)

bitnmap和bufferDC都应该与dc(它所引用的任何设备)兼容,而不是与自己的DC兼容的位图。

尝试将&dc提交给CreateCopmpatibleBitmap

答案 2 :(得分:0)

您的代码段未显示dc变量的来源。这个人可能包含一个单色位图,默认情况下。反正你也不需要它。相反,将NULL传递给CreateCompatibleDC,它的格式与显示格式相同,可能是颜色。