gpt4 book ai didi

c++ - GDI+ 双缓冲

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:11:33 30 4
gpt4 key购买 nike

我已经成功地使用 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 进行双重缓冲吗?谢谢

最佳答案

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

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

GDI Acceleration In Windows 7 / Drawing To Memory Bitmap

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

关于c++ - GDI+ 双缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15323952/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com