来自unsigned char缓冲区的QImage(jpg格式)

时间:2011-12-12 12:46:11

标签: c++ image qt jpeg

我有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.

4 个答案:

答案 0 :(得分:6)

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

如果您不打算修改图片,请使用QPixmap及其loadFromData()功能:

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

您还可以使用QImage::fromData / QImage::loadFromDataQImageReader + QBuffer加载Jpeg缓冲区。

答案 1 :(得分:0)

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

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

请注意QImage提供constructor,其中图像文件名为参数。

答案 2 :(得分:0)

正确的方法是不将jpg数据解释为RGB格式,并使用适当的类(例如QImageReader)或事件使用the constructor来直接加载图像。

答案 3 :(得分:0)

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

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

其中:

filename is the path to the image 
format is in your case "JPG" or JPEG 
flags  is to specify if the image is black white or color (see the documentation for details)