我已经设法用GDI实现了双缓冲,但用GDI+就不行了。我想显示一个没有闪烁的png图像。此外,在某些情况下,我也想使用GDI+实现png图像的动画,所以知道如何使用GDI +加倍缓冲是势在必行的。
我已经设法通过ISTREAM将png图像转换为image对象:这是我的代码的一部分,它将帮助您理解我遇到问题的地方:
memmove(pBlock,pImage, size);
CreateStreamOnHGlobal(hBlock, FALSE, &pStream);
Graphics graphics(memDC);
Image image(pStream);
int image_width;
int image_height;
image_width= image.GetWidth();
image_height=image.GetHeight();
graphics.DrawImage(&image, posX,posY, image_width, image_height);
BitBlt(hdc, 0, 0, image_width, image_height, memDC, 0, 0, SRCCOPY);注意:如果我将png图像直接绘制到屏幕DC (hdc),渲染效果会很好。但是,当我尝试先将图像绘制到memDC,然后将该memDC绘制到screenDC时,没有图像出现!
有没有人能给我指个正确的方向,告诉我如何用GDI plus来加倍缓冲?谢谢
发布于 2013-03-12 16:10:46
我认为您的问题可能出在您创建memDC的方式上--您是否使用CreateCompatibleDC()来创建它,以确保它与您正在执行BitBlt()的hdc兼容?
我之前回答了一个关于双缓冲的类似问题,你可能会发现这个答案很有帮助:
GDI Acceleration In Windows 7 / Drawing To Memory Bitmap
其中有一些代码,我已经用了相当多的GDI来加倍缓冲,但使用GDI或GDI+绘制到内存位图。我发现能够使用GDI真的很有用,因为对于某些操作(特别是与位图相关的函数)来说,它比GDI+快得多,但GDI+做一些事情要容易得多,所以它兼收并蓄。
https://stackoverflow.com/questions/15323952
复制相似问题