QT,使用硬件加速(gpu)将原始图像转换为jpg

时间:2011-10-05 14:18:36

标签: qt gpu jpeg qpainter

我需要将Raw图像缓冲区转换为jpg图像缓冲区。

目前,我按以下方式执行此操作:

QImage tmpImage 
         = QImage(rawImgBuffer, img_width, img_height, image.format ); //image.format=RGB888 
QBuffer bufferJpeg(&ba);
bufferJpeg.open(QIODevice::WriteOnly);
tmpImage.save(&bufferJpeg, "JPG");
QByteArray finalJpgBuffer = bufferJpeg.data();

它工作正常但是cpu负载太高(我有很多线程每秒都会执行此操作很多次)。 阅读Qt文档,我发现了这篇文章:Hardware Acceleration &amp Embedded Platforms。 如果我明白了,我可以使用QPainter类来执行gpu操作...... 是否可以使用此类进行此转换(从raw到jpg)? (或使用硬件加速(gpu)的其他类似Qt类)!!

我的应用需要与平台无关。

完全没有。

2 个答案:

答案 0 :(得分:2)

我不认为QImage使用GPU来生成jpeg 这可能没有帮助(除非在非常有限的CPU上),因为从GPU获取数据的传输时间通常占主导地位。使用硬件加速进行显示的原因是结果已经在GPU中准备好显示了。

答案 1 :(得分:0)

据我所知,QPainter不处理图像格式的解码(本例中为jpeg)。它由Qt使用libjpeg完成,它由Qt使用插件控制。你可以在qt_source_tree / src / plugins / imageformats / jpeg中找到该插件。这只是使用您在系统上可用的库(Linux中的libjpeg.so)。如果它是硬件加速或不加速,则取决于您的系统。

我遇到了使用特定库所需的硬件解码的情况。在那种情况下,我必须创建一个特定的Qt插件来处理它。