GDI+ Double Buffering

GDI+ Double Buffering

本文关键字:Buffering Double GDI+      更新时间:2023-10-16

我已经设法实现双缓冲与GDI,但不是与GDI+。我想显示png图像没有它闪烁。此外,在某些时候,我也想用GDI+实现png图像的动画,所以知道如何使用GDI+双重缓冲是必要的。

我已经设法通过ISTREAM将png图像转换为图像对象:这里是我的代码的一部分,将帮助您了解我遇到的问题:

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

有人能指出我在正确的方向,有人是如何双重缓冲与GDI加?谢谢你

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

我以前回答过一个类似的关于双缓冲的问题,你可能会发现这个答案很有用:

GDI加速在Windows 7/绘图到内存位图

那里的代码,我已经使用了相当多的双缓冲区与GDI,但绘制到内存位图使用GDI或GDI+。我发现能够使用GDI真的很有用,因为它比GDI+在某些操作(尤其是位图相关的函数)上要快得多,但是GDI+做一些事情要容易得多,所以它提供了两个世界的最佳效果。