首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GDI+双缓冲

GDI+双缓冲
EN

Stack Overflow用户
提问于 2013-03-10 23:33:49
回答 1查看 2.3K关注 0票数 4

我已经设法用GDI实现了双缓冲,但用GDI+就不行了。我想显示一个没有闪烁的png图像。此外,在某些情况下,我也想使用GDI+实现png图像的动画,所以知道如何使用GDI +加倍缓冲是势在必行的。

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

代码语言:javascript
运行
复制
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来加倍缓冲?谢谢

EN

回答 1

Stack Overflow用户

发布于 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+做一些事情要容易得多,所以它兼收并蓄。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15323952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档