免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1317 | 回复: 0
打印 上一主题 下一主题

qt绘制背景图加速方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-17 14:29 |只看该作者 |倒序浏览
在使用qt3.3.2开发实时系统的图形时,如果我们需要设置图形的背景图,需要使用下面的函数进行绘制:
void
QPainter::drawImage ( const QPoint &, const QImage &, const
QRect & sr, int conversionFlags = 0 )
或者是
void QPainter::drawPixmap
( int x, int y, const QPixmap & pixmap, int sx = 0, int sy = 0, int
sw = -1, int sh = -1 )
如果你在绘制大的背景图时使用了drawImage()函数,你将会发现背景图刷新的速度会比较慢,这一点在qt的文档中也进行了说明:
There
are functions to draw pixmaps/images, namely drawPixmap(), drawImage()
and drawTiledPixmap(). drawPixmap() and drawImage() produce the same
result, except that drawPixmap() is faster on-screen and drawImage()
faster and sometimes better on QPrinter and QPicture.
还有在drawImage()函数的说明中:
This function may convert image to a pixmap and
then draw it, if device() is a QPixmap or a QWidget, or else draw it
directly, if device() is a QPrinter or QPicture.
所以我们要做的第一步就是要把程序中使用drawImage()函数的地方转化为drawPixmap();
Ok,完成了上面的第一步之后,背景图刷新快多了,但出现了第二个问题又出现了,将QImage转换为QPixmap或者直接将图形加载为QPixmap
依然很慢,这样就造成第一次打开某个图形文件时,背景图的加载会变得比较慢(当然,打开后只需要drawpixmap,就会比较流畅了),
为了解决这个问
题,我们设置如下结构: Struct file2qpixmap
{ Char filename[256]; QPixmap qpixmap;
};
将背景图片文件与相应的QPixmap数据结合起来做成一个全局的链表,每次打开图形文件后到链表中查找相应的背景图形对应的QPixmap数据是否已经
存在,如果存在则直接使用,如果不存在,就插入一个新的节点.这样,对于使用同一副背景图片的图形文件而言,背景图形的QPixmap数据只需要加载一
次.这样就再一次提高了图形文件刷新和切换的速度.
更进一步,我们可以把上述链表的内容写入内存映射文件或者数据库,每次程序启动的时候只需要将链表映射到当前程序的内存中就可以使用了,这样就进一步加快
了背景图形的刷新,而且这样跳开了对qpixmap数据的加载.但这种方法我没有进行测试,有兴趣的朋友可以试一下.
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/72751/showart_1084396.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP