我的当前代码遵循以下流程:磁盘 > 字节数组 > 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.5秒
第二步需要3.0秒 - 解码jpeg是最慢的一步
第三步需要0.1秒
显然,解码jpeg数据是最慢的一步。我该如何使其更快?
是否有第三方库可以将jpeg数据的字节数组转换为ppm数据的字节数组,以便更快地加载到QImage中?
顺便说一下,使用QPixmap
和QImage
所需的时间相同。
paintEvent
дёӯи§Јз ҒJPEGеҗ—пјҹиҝҷжҳҜеҝ…иҰҒзҡ„еҗ—пјҹдҪ е°қиҜ•дҪҝз”ЁQLabel
е’ҢQLabel::setPixmap
дәҶеҗ—пјҹ - Pavel StrakhovQImage
(或QPixmap
)所需的时间最小化。一旦QImage
被加载,无论是在QLabel
还是任何其他小部件上,渲染它都非常快速。 我提到渲染部分的原因是为了表明我可以接受不使用Qt提供的类(如QImage
或QPixmap
)的解决方案。 - S BQByteArray
和QImage
步骤。您可以通过将文件名传递给其构造函数来直接创建QPixmap
:QPixmap pixmap("/path/to/file");
- Pavel StrakhovQPixmap px("path/to/file")
只是缩短了代码,但需要与步骤1和2的时间相同。我已经测试过了。在我的问题中,我故意将这两个步骤分开,因为由于磁盘延迟,我不认为步骤1有任何优化的空间。但我看到步骤2有优化的空间。 - S B