繁体   English   中英

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

[英]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::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 )

其中:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM