Qt:通过预解释和预读取,大幅度提升图片加载速度

在我以往的开发中,尤其是嵌入式,图片的加载一直是一个头疼的问题。图片大了,加载就很慢,在嵌入式上,一个1280*1080的图片,加载可能要好几百毫秒。也就是说加载一个背景,就可能要花去几百毫秒,还不包括其他各种图片。
在用尽各种奇妙的方法后,今天终于找到一个根治的方法。赶紧来和大家分享下。

首先,我们要知道一个图片的加载,时间到底消耗在哪。

一般来说,一个图片加载,可以分为两步,第一步是从硬盘读取,这个根据设备的不同,差异会非常大。尤其是固态硬盘和机械硬盘,差个10倍都不夸张。第二部是将数据,比如说PNG数据解释为RGBA数据(这里我暂时用解释这一词,如有更好请指正)。这一步会根据图片的复杂程度不同,带来不同程度的开销。以我测试结果来看,对于一个普通的PNG图片,解释会占用大部分时间,大约是60%到90%的总时间开销。

也就是说,去掉解释的时间开销,是我们优化的大头。做这样简单的优化,我们就可以成倍提升图片的加载速度。那么如何优化呢,我的思路是这样的:

在第一次加载好图片后,就直接把解释好的RGBA数据保存到本地,以供下一次直接读取RGBA数据。

其实思路很简单,至于实现方法,我从模式上,直接照搬了qmlc那一套,就是在本地(硬盘中)的cache目录,保存缓存文件。而文件的命名,我使用了md5.jqic的模式,md5为(文件全路径)+(修改时间戳的字符串)的运算结果,jqic为JQImageCache的简称。保存效果如下

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值