来自无符号字符缓冲区的 QImage(jpg 格式)

QImage from unsigned char buffer (jpg format)

本文关键字:jpg 格式 QImage 无符号 字符 缓冲区      更新时间:2023-10-16

我有 unsigned char* 类型的缓冲区,我用 JPG 图像填充它。 我想使用此缓冲区在 QLabel 中将图像绘制到我的应用程序屏幕。

我已经这样做了,但图像不正确。

谁能告诉我最好的方法是什么?

QPixmap pix = QPixmap::fromImage(
     QImage(buff, 460, 345, QImage::Format_RGB888)); //Not sure what format to use for a jpg image?
one_img->setPixmap(pix);  //one_img is of type QLabel.

QImage::loadQImage构造函数希望图像缓冲区采用未压缩的格式。

如果您不打算修改映像,请使用 QPixmap 及其loadFromData()函数:

QPixmap pix;
pix.loadFromData(buff, sizeOfBuff, "JPG");

您还可以加载带有 QImage::fromData/QImage::loadFromDataQImageReader + QBuffer 的 Jpeg 缓冲区。

这可能与图像格式有关。这取决于将图像加载到缓冲区中的方式。 QImage希望在提供的缓冲区中逐行查找存储的图像。

尝试Format_Indexed8Format_RGB32图像格式。如果仍然不起作用,请告诉我们您如何将jpeg图像加载到缓冲区中。

请注意,QImage提供了一个构造函数,其中图像文件名作为参数。

正确的方法是不要将 jpg 数据解释为 RGB 格式,而是使用适当的类,例如 QImageReader,或者事件使用构造函数直接加载图像。

你说你用jpg填充缓冲区,所以你似乎已经保存了一个图像。如果是这样,最好的方法是使用:

QPixmap ( const QString & fileName, const char * format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor )

哪里:

文件名是图像的路径格式在您的情况下是"JPG"或 JPEGflags 用于指定图像是黑白还是彩色(有关详细信息,请参阅文档(