首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

分享:关于IImage的图片显示(闪屏的处理)解决方案

2012-03-28 
分享:关于IImage的图片显示(闪屏的处理)之前发过帖子询问关于绘制窗口时的问题,A,B窗口互相独立,B弹出时会

分享:关于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);


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

[解决办法]
呵呵。谢谢了。
这种方法使用的很普遍
先将图片写进内存中的缓冲DC中
然后每次从内存DC中读取图片
这样只有第一次的时间长一点
可以优化闪屏的现象
这些操作,需要注意的就是释放内存
楼主的分享精神很值得称赞
建议这些东西都记录到博客里
也方便自己以后查阅
嘿嘿
[解决办法]
赞美一下楼主。刷屏我也要用到,感谢哦。
[解决办法]
MARK~呵呵
[解决办法]
学习了

热点排行