【问题标题】:QImage from unsigned char buffer (jpg format)来自无符号字符缓冲区的 QImage(jpg 格式)
【发布时间】:2012-01-18 11:00:09
【问题描述】:

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

【问题讨论】:

    标签: c++ image qt jpeg


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      在哪里:

      文件名是图像的路径 格式在你的情况下是“JPG”或JPEG flags 是指定图像是黑白还是彩色(详见文档)

      【讨论】:

        【解决方案3】:

        正确的做法是不要将jpg数据解释为RGB格式,使用合适的类,比如QImageReader,或者事件使用the constructor直接加载图片。

        【讨论】:

          【解决方案4】:

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

          尝试Format_Indexed8Format_RGB32 图像格式。如果仍然无法正常工作,请告诉我们您是如何将 jpeg 图像加载到缓冲区中的。

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

          【讨论】:

            猜你喜欢
            • 2010-10-13
            • 2015-02-09
            • 2016-03-09
            • 1970-01-01
            • 2019-09-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多