Qt缩放图片效率比较 原创

更多精彩内容
👉个人内容分类汇总 👈

图片Qt缩放并图片效率比较🤙

  • 在Qt里常用的图片显示方式一般是QLabel、QPainter、OpenGL,但是QLabel效率低,OpenGL使用麻烦,不适合初学者,所以一般我们都是使用QPainter绘制图片;
  • 而图片显示会遇见图片缩放问题,这就需要用到QPixmap或者QImage自带的scaled函数了,同时考虑到效率问题,我们也需要将图片转换为QPixmap进行显示,这里就比较了一下两种使用方式的效率;
    • 方式一:先将QImage图片进行缩放,然后转换为QPixmap图片;
    • 方式二:先将QImage图片转换为QPixmap图片,再进行缩放。
  • 关键代码👍
/**
 * @brief        使用Qpainter显示图片
 * @param event
 */
void PlayImage::paintEvent(QPaintEvent *event)
{
    if(!m_image.isNull())
    {
        QPainter painter(this);
        QElapsedTimer timer;
        timer.start();
#if 1
        // 经过粗略测试,QImage先缩放后转为QPixmap的方式在图像比较小时耗时少,图片越大耗时远大
        QPixmap pixmap = QPixmap::fromImage(m_image.scaled(this->size(), Qt::KeepAspectRatio));
        qint64 t1 = timer.elapsed();
        timer.start();
        // 先将QImage转换为QPixmap再进行缩放则耗时比较少,并且稳定,不会因为缩放图片大小而产生太大影响
        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,并且比较稳定。
    在这里插入图片描述
posted @ 2022-07-07 14:14  mahuifa  阅读(0)  评论(0编辑  收藏  举报  来源