GDI +双缓冲

时间:2013-03-10 15:33:49

标签: c++ winapi visual-c++ gdi+

我已经成功实现了GDI的双缓冲,但没有使用GDI +。我想显示一个png图像而不会闪烁。此外,在某些时候我还想使用GDI +实现带有png图像的动画,因此知道如何使用GDI +加倍缓冲是必要的。

我设法通过IST​​REAM将一个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 blt到screenDC时,不会出现图像!

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

1 个答案:

答案 0 :(得分:2)

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

我之前就双缓冲问题回答了类似的问题,您可能会发现答案有用:

GDI Acceleration In Windows 7 / Drawing To Memory Bitmap

那里的代码我用了很多来用GDI加倍缓冲,但是使用GDI或GDI +绘制到内存位图。我发现能够使用GDI真的很有用,因为它比GDI +更快地进行某些操作(特别是位图相关的功能),但GDI +更容易做一些事情,因此它提供了两全其美的效果。