关于IImage的图片显示(闪屏的处理)

之前发过帖子询问关于绘制窗口时的问题,
A,B窗口互相独立,B弹出时会覆盖A,B隐藏时覆盖A的部分会刷白,之后在网上查询过资料后找到了解决的问题。
因为A,B窗口都是贴了PNG的图片,PNG用PS修饰之后可以显示透明的效果,于是就用了IImage绘制。
关于IIamge网上有许多资料,大家可以查阅。
后来发现刷屏的问题是由于IImage在Draw的时候速度太慢,然后看了下面的链接,然后就解决刷屏慢的问题了。
http://hi.baidu.com/nosoft008/blog/item/cd6d3131ded576ac5fdf0e66.html

一般绘图时要想不闪屏,都会用到内存DC来绘制,但是在绘制的时候大家有没有注意,如果绘制时每次的背景图片有很多,那每次draw那些图片也是很费时间的,所以可以按照上面地址里描述的,第一次做绘制的时候内存DC保留住,然后以后再绘制时直接使用那DC,然后要做的只是去调用Bltbit或者strechbit的函数来显示内存DC的图,那速度会快很多。

C/C++ code
   
   
// 获取图片属性 m_pImage -> GetImageInfo( & ImageInfo); // 创建一个内存DC,用来存储图片数据 hBitmap = CreateCompatibleBitmap(hdc,ImageInfo.Width,ImageInfo.Height); hdcMem = CreateCompatibleDC(hdc); hOldSel = SelectObject(hdcMem,hBitmap); ... // 将图片数据存储到内存DC中 rcMemDC = { 0 , 0 ,ImageInfo.Width,ImageInfo.Height}; m_pImage -> Draw(hdcMem, & rcMemDC,NULL); ... // 将图片绘制到目标DC StretchBlt(hdc, pDstRect -> left, pDstRect -> top, pDstRect -> right - pDstRect -> left, pDstRect -> bottom - pDstRect -> top, hdcMem, pSrcRect -> left, pSrcRect -> top, pSrcRect -> right - pSrcRect -> left, pSrcRect -> bottom - pSrcRect -> top, SRCCOPY);



希望对大家能有帮助~~~~~~~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值