我有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.
答案 0 :(得分:6)
QImage::load
或QImage
构造函数期望图像缓冲区采用未压缩格式。
如果您不打算修改图片,请使用QPixmap
及其loadFromData()
功能:
QPixmap pix;
pix.loadFromData(buff, sizeOfBuff, "JPG");
您还可以使用QImage::fromData
/ QImage::loadFromData
或QImageReader
+ QBuffer
加载Jpeg缓冲区。
答案 1 :(得分:0)
这可能与图像格式有关。这取决于您将图像加载到缓冲区的方式。 QImage
期望在提供的缓冲区中逐行查找存储的图像。
尝试Format_Indexed8
或Format_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)