项目场景:
有大图片需要显示,长宽至少都是几k的
问题描述
直接使用QPixmap::scaled()方法,Qt::FastTransformation会导致图像质量不佳,Qt::SmoothTransformation在缩放比例比较大的时候速度比较慢,有点卡顿
解决方案:
缩放比在一定的比例之下,使用如下方式,个人使用的比例是50%,即缩放比在50%一下,直接将原图通过SmoothTransformation的方式缩小
QPixmap QPixmap::scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::SmoothTransformation) const
在比例之上,使用下面的方式,当缩放比大于指定比例时,先裁剪出其中用于显示的部分,然后将裁剪后的图片缩放到显示的尺寸
auto tmp = pixmap.copy(clip_rect);
display = tmp.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
对于比例之上的缩放方式,移动的时候需要更新显示的内容
注意:
以上测试图像尺寸为 4000 x 5000,更大的尺寸没有试过, 料想通过调整比例,可以丝滑显示更大的图片
以上代码对于小图没有任何影响,因为太小了,操作很快。测试960x960的图片,没有任何影响
有尝试过将缩放比例从50调整为150或者100的样子,从50 - 指定比例之间,缩放的速度显著变慢
效果展示:
实际缩放到 30000%速度依然很快