图片Qt缩放并图片效率比较🤙
- 在Qt里常用的图片显示方式一般是QLabel、QPainter、OpenGL,但是QLabel效率低,OpenGL使用麻烦,不适合初学者,所以一般我们都是使用QPainter绘制图片;
- 而图片显示会遇见图片缩放问题,这就需要用到QPixmap或者QImage自带的scaled函数了,同时考虑到效率问题,我们也需要将图片转换为QPixmap进行显示,这里就比较了一下两种使用方式的效率;
- 方式一:先将QImage图片进行缩放,然后转换为QPixmap图片;
- 方式二:先将QImage图片转换为QPixmap图片,再进行缩放。
- 关键代码👍
void PlayImage::paintEvent(QPaintEvent *event)
{
if(!m_image.isNull())
{
QPainter painter(this);
QElapsedTimer timer;
timer.start();
#if 1
QPixmap pixmap = QPixmap::fromImage(m_image.scaled(this->size(), Qt::KeepAspectRatio));
qint64 t1 = timer.elapsed();
timer.start();
QPixmap pixmap1 = QPixmap::fromImage(m_image).scaled(this->size(), Qt::KeepAspectRatio);
#endif
qDebug() << t1 << " " << timer.elapsed() <<" "<< this->size();
int x = (this->width() - pixmap.width()) / 2;
int y = (this->height() - pixmap.height()) / 2;
painter.drawPixmap(x, y, pixmap);
}
QWidget::paintEvent(event);
}
- 测试方式: 保持窗口高度不变,改变窗口宽度,打印两种方式的耗时;🕝
- 测试结果:方式二效率普遍高于方式1,并且比较稳定。 ☝