加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – GDI双缓冲

发布时间:2020-12-16 07:35:23 所属栏目:百科 来源:网络整理
导读:我已经成功实现了GDI的双缓冲,但没有使用GDI.我想显示一个png图像而不会闪烁.此外,在某些时候我还想使用GDI实现带有png图像的动画,因此知道如何使用GDI加倍缓冲是必要的. 我已经设法通过IST??REAM将一个png图像放到一个Image对象中:这是我的一部分代码,可以
我已经成功实现了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,image_height,memDC,SRCCOPY);

注意:如果我将png图像直接绘制到屏幕DC(hdc),它会渲染得很好.但是,当我首先尝试将图像绘制到memDC,然后将该memDC blt到screenDC时,不会出现图像!

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

解决方法

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

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

GDI Acceleration In Windows 7 / Drawing To Memory Bitmap

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读