0

我需要将原始图像缓冲区转换为 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 & Embedded Platforms。如果我理解的话,我可以使用 QPainter 类来执行 gpu 操作......是否可以使用这个类进行这种转换(从 raw 到 jpg)?(或另一个使用硬件加速 (gpu) 的类似 Qt 类)!!

我的应用程序需要独立于平台。

非常感谢。

4

2 回答 2

2

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

于 2011-10-05T14:39:35.310 回答
0

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

我有一个案例,需要硬件解码才能使用特定的库。在那种情况下,我必须创建一个特定的 Qt 插件来处理它。

于 2011-10-05T15:22:46.173 回答