2013-03-10 90 views
4

我设法实现GDI的双缓冲,但不是与GDI +。我想显示一个没有闪烁的PNG图像。此外,在某些时候,我还希望使用GDI +实现png图像的动画,因此了解如何使用GDI +加倍缓冲区势在必行。GDI +双缓冲

我已经得到了一个PNG图像转换成一个Image对象,通过一个IStream:这里是我的代码的一部分,这将有助于你明白的地方我有麻烦:

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绘制到屏幕DC上时,没有图像出现!

有人可以请我指出正确的方向,如何有人将GDI加倍缓冲区?谢谢

+1

根本没有错误检查。所以当然你不知道为什么它不起作用。 – 2013-03-10 17:50:06

回答

2

我认为你的问题可能在于你如何创建你的memDC - 你是否使用CreateCompatibleDC()创建它,以确保它与你正在执行BitBlt()的hdc兼容?

我已经回答类似这样的问题关于双缓冲之前之前,你可能会发现,答案有帮助:

GDI Acceleration In Windows 7/Drawing To Memory Bitmap

有代码,还有,我用了很多双缓冲带GDI,但使用GDI或GDI +绘制到内存位图。我发现它能够使用GDI非常有用,因为它对于某些操作(特别是与位图相关的函数)比GDI +快得多,但是GDI +可以更轻松地完成一些操作,因此可以实现两全其美。