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

7

我正在尝试在一个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个回答

13

常见错误。内存DC会继承所选择的位图的属性,无论其与何种兼容性一起创建。默认选择到一个DC的位图为黑白色。如果您创建了一个与该DC兼容的位图,则它也将是黑白的。

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


1

无论设备是什么,位图和bufferDC都应该与dc兼容,而不是与自己的DC兼容。

尝试将&dc传递给CreateCompatibleBitmap函数。


0

你的代码片段没有显示dc变量来自哪里。这个 guy 可能包含单色位图,默认值。不管它。相反,将NULL传递给CreateCompatibleDC,它将与您的显示器格式相同,可能是彩色的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接