查看完整版本: [-- Qt如何快速显示高分辨率的图像 --]

QTCN开发网 -> Qt QML开发 -> Qt如何快速显示高分辨率的图像 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

zc_5200 2017-02-04 10:34

Qt如何快速显示高分辨率的图像

Hi,
最近在做照片显示,我用的是qt5.7,,AM437x平台,600M主频,LCD分辨率是480*640,
发现将一张500w像素的图片显示出来要耗费4s左右,这个时间实在是太长了,请问有没有什么办法可以快速显示的?
下面是我的显示代码:
struct timeval tvStart, tvEnd;
    gettimeofday(&tvStart, NULL);
    QPixmap p(path);
    gettimeofday(&tvEnd, NULL);
    qDebug("@@@ show jpeg1: %ds\n", tvEnd.tv_sec - tvStart.tv_sec);   -->代码走到这里耗费了4s
    qDebug("Pic: %s, w:%d, h:%d", qPrintable(path), p.width(), p.height());


    gettimeofday(&tvStart, NULL);
    QPixmap fitp = p.scaled(ui->lblPic->width(), ui->lblPic->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
    gettimeofday(&tvEnd, NULL);
    qDebug("@@@ show jpeg2: %ds\n", tvEnd.tv_sec - tvStart.tv_sec); -->scale耗费1s左右
    ui->lblPic->setPixmap(fitp);
谢谢大家了:)

uidab 2017-02-04 11:30
500W像素,你可以先把图片放到资源里吗???如果不行,试试提前载入图片到内存里。
另外,你的LCD是480*640,才30W,用SmoothTransformation比用FastTransformation慢是正常,如果效果差别不大,可以用后者。

zc_5200 2017-02-04 13:23
uidab:500W像素,你可以先把图片放到资源里吗???如果不行,试试提前载入图片到内存里。
另外,你的LCD是480*640,才30W,用SmoothTransformation比用FastTransformation慢是正常,如果效果差别不大,可以用后者。 (2017-02-04 11:30) 

我是要实现照片浏览功能的,所以不能放到资源里
另外,提前加入内存也无法提高速度,QPixmap p(path);这个是主要的耗时,不清楚里面对jpg图像做了什么处理,导致很慢
另外,后面会考虑使用FastTransform,不过这个不是主要的耗时

uidab 2017-02-04 14:05
QPixmap p(path);
就是这句代码,你放到别的地方执行!

zc_5200 2017-02-04 15:41
uidab:QPixmap p(path);
就是这句代码,你放到别的地方执行! (2017-02-04 14:05) 

你是说放到别的线程里执行吗?
我现在就是放在别的地方执行的,但是解决不了问题啊,这句话还是得耗费4s左右,主界面这个时候只能搞个菊花转圈等待
我觉得这个不科学啊,如果显示一张图这么慢,QT还怎么玩啊。。。

rdghx 2017-02-04 21:26
使用libjpeg-turbo(NEON) 来解码 jpeg文件看看


查看完整版本: [-- Qt如何快速显示高分辨率的图像 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled