[英]QImage from unsigned char buffer (jpg format)
我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::load
或QImage
构造函数期望图像缓冲区处于未压缩格式。
如果您不打算修改图像,请使用QPixmap
及其loadFromData()
函数:
QPixmap pix;
pix.loadFromData(buff, sizeOfBuff, "JPG");
您还可以使用QImage::fromData
/ QImage::loadFromData
或QImageReader
+ QBuffer
加载Jpeg缓冲区。
这可能与图像格式有关。 这取决于您将图像加载到缓冲区的方式。 QImage
期望在提供的缓冲区中逐行查找存储的图像。
尝试Format_Indexed8
或Format_RGB32
图像格式。 如果它仍然无法正常工作,请告诉我们如何将jpeg
图像加载到缓冲区中。
请注意, QImage
提供了一个构造函数 ,其图像文件名为参数。
正确的方法是不将jpg数据解释为RGB格式,并使用适当的类,例如QImageReader ,或者事件使用构造函数直接加载图像。
你说你用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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.