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

zc_5200 2017-01-24 09:20:20
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);
谢谢大家了:)
...全文
1628 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
AI_码起 2020-09-27
  • 打赏
  • 举报
回复
老哥,我现在也遇到这个问题,高分辨率图像实时显示会卡顿,也发现是转换过程耗时长,请问你是如何解决的
楼兰公子 2017-03-07
  • 打赏
  • 举报
回复
你怎么确定就是图片现实的问题,不是图片解码或者其他问题耗费时间,应该通过调试查看时间点
taohe_0 2017-03-02
  • 打赏
  • 举报
回复
引用 7 楼 zc_5200 的回复:
[quote=引用 6 楼 taohe_0 的回复:] 我也遇到过类似情况,QPixmap 是写显存,小一些的操作还行,数据量大了效率不行,试试QImage,这个是写内存的,速度比QPixmap要快
你好,请问你是怎么解决这个问题的? 我试过用QImage,速度也很慢的[/quote] 我使用QImage绘图,重载的绘图类集成QGLWidget,我的系统带有很烂的显卡,但是能3D加速。
Little柯南 2017-03-01
  • 打赏
  • 举报
回复
引用 11 楼 zc_5200 的回复:
[quote=引用 10 楼 u010111033 的回复:] 你去看看我的博客吧!如果ARm里面配置有GPU也可以使用GPU加速,label上加载QPixmap压力全给了CPU,你的主频才600MHZ,计算压力最好分配出去点。 另外使用pixmap的load先加载进内存,然后使用绘画事件paint出来就好
你好,目前是没有配置GPU的。我感觉600M已经不低了啊,我现在改为1G也很慢,load一下要2,3秒的样子[/quote] 个人建议了,还是你使用Qpixmap或者QImage方式paint出来
Little柯南 2017-02-09
  • 打赏
  • 举报
回复
你去看看我的博客吧!如果ARm里面配置有GPU也可以使用GPU加速,label上加载QPixmap压力全给了CPU,你的主频才600MHZ,计算压力最好分配出去点。 另外使用pixmap的load先加载进内存,然后使用绘画事件paint出来就好
bestman 2017-02-09
  • 打赏
  • 举报
回复
主要还是主频太低了
bestman 2017-02-09
  • 打赏
  • 举报
回复
大图片难显示,把大图片分割成4个小图片
zc_5200 2017-02-09
  • 打赏
  • 举报
回复
引用 10 楼 u010111033 的回复:
你去看看我的博客吧!如果ARm里面配置有GPU也可以使用GPU加速,label上加载QPixmap压力全给了CPU,你的主频才600MHZ,计算压力最好分配出去点。 另外使用pixmap的load先加载进内存,然后使用绘画事件paint出来就好
你好,目前是没有配置GPU的。我感觉600M已经不低了啊,我现在改为1G也很慢,load一下要2,3秒的样子
taohe_0 2017-02-04
  • 打赏
  • 举报
回复
我也遇到过类似情况,QPixmap 是写显存,小一些的操作还行,数据量大了效率不行,试试QImage,这个是写内存的,速度比QPixmap要快
zc_5200 2017-02-04
  • 打赏
  • 举报
回复
引用 2 楼 zyq5945 的回复:
放在次线程中做图像处理工作,处理完成后再用信号将图像传递到主线程直接显示。
Hi,这个方法只能解决界面线程不被阻塞,不能解决快速显示出来图像啊
zc_5200 2017-02-04
  • 打赏
  • 举报
回复
引用 1 楼 firebolt2002 的回复:
瓶颈是不是在文件读取部分啊。快速显示得靠离屏表面了。
Hi,瓶颈应该不是在读取文件的部分,500w的图片不到1M的大小,QPixmap p(path);这句就花了4s
zc_5200 2017-02-04
  • 打赏
  • 举报
回复
引用 6 楼 taohe_0 的回复:
我也遇到过类似情况,QPixmap 是写显存,小一些的操作还行,数据量大了效率不行,试试QImage,这个是写内存的,速度比QPixmap要快
你好,请问你是怎么解决这个问题的? 我试过用QImage,速度也很慢的
zyq5945 2017-01-25
  • 打赏
  • 举报
回复
放在次线程中做图像处理工作,处理完成后再用信号将图像传递到主线程直接显示。
firebolt2002 2017-01-25
  • 打赏
  • 举报
回复
瓶颈是不是在文件读取部分啊。快速显示得靠离屏表面了。

16,861

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧