gpt4 book ai didi

qt - 将 jpeg 文件渲染到 QWidget 的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-01 03:06:52 26 4
gpt4 key购买 nike

我当前的代码如下:Disk > bytearray > QImage(或 QPixmap)> Painter

// Step 1: disk to qbytearray
QFile file("/path/to/file");
file.open(QIODevice::ReadOnly);
QByteArray blob = file.readAll();
file.close();

// Step 2: bytearray to QImage
this->mRenderImg = new QImage();
this->mRenderImg->loadFromData(blob, "JPG");

// Step 3: render
QPainter p(this);
QRect target; // draw rectangle
p.drawImage(target, *(this->mRenderImg));

第一步耗时0.5s
第 2 步需要 3.0 秒 - 解码 jpeg 是最慢的一步
第3步耗时0.1s

显然,解码 jpeg 数据是最慢的步骤。如何让它更快?

是否有第三方库可以将 jpeg 数据的字节数组转换为可以更快加载到 QImage 的 ppm 字节数组?

顺便说一句,使用 QPixmapQImage 花费的时间相同。

最佳答案

我能够使用 libjpeg-turbo 显着减少 QImage 加载时间。以下是步骤

  • 第 1 步:将 .jpeg 加载到内存 filebuffer
  • 第 2a 步:使用 tjDecompress2()filebuffer 解压为 uncompressedbuffer
  • 步骤 2b:使用 QImage(uncompressedbuffer, int width, int height, Format pixfmt) 加载 QImage
  • 第 3 步:渲染

QImage::loadFromData()

相比,步骤 2a 和 2b 相结合提供了至少 3 倍的加速

注释

    libjpeg 的 tjDecompress2() 中使用的
  • PixelFormat 应与步骤 2b 中指定的格式匹配
  • 您可以使用 tjDecompressHeader2()
  • 导出步骤 2b 中使用的 widthheight

关于qt - 将 jpeg 文件渲染到 QWidget 的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com