使用 Qt 从原始数据加载图像

Posted

技术标签:

【中文标题】使用 Qt 从原始数据加载图像【英文标题】:Loading an image from raw data with Qt 【发布时间】:2013-01-02 12:02:04 【问题描述】:

我很惊讶,因为我找不到任何从原始数据加载图像的方法。有什么优雅的方法吗?我只需要从原始位图二进制数据(无标题)创建一个 QImage 或类似的。

【问题讨论】:

【参考方案1】:

您可以使用带有 uchar 数组的 ctor 从原始数据创建一个 QImage 对象。 您需要指定提供给 QImage 的数据格式(RGB、RGBA、Indexed 等)

QImage ( uchar * data, int width, int height, Format format )
QImage ( const uchar * data, int width, int height, Format format )
QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
QImage ( const uchar * data, int width, int height, int bytesPerLine, 
         Format format )

http://doc.qt.digia.com/qt/qimage.html

例如:

uchar* data = getDataFromSomewhere();
QImage img(data, width, height, QImage::Format_ARGB32);

希望对您有所帮助。

【讨论】:

亲爱的卢卡斯,感谢您的回答。当然有帮助!问题是我不想创建 QImage 对象的新实例。不管怎么说,还是要谢谢你。干杯 @DídacPérez 考虑到 Qt 重量级值类型的写时复制语义,创建一个新图像实例并将其分配给现有对象应该不会造成任何损害。【参考方案2】:

你的问题不清楚。使用 Qpixmap。和 Qbyte 数组。这很容易。

  QPixmap pic;
  pic.loadFromData(array); //array contains a bite array of the image.
  label->setPixmap(pic);  //do what ever you want from the image. here I set it to a lable.

【讨论】:

亲爱的Lakshan,你的回答和digitalSurgeon一模一样,请看我上面的cmets。

以上是关于使用 Qt 从原始数据加载图像的主要内容,如果未能解决你的问题,请参考以下文章

从 3 通道彩色图像的原始数据加载 Opencv 矩阵

QT 无法从缓冲区加载图像

使用 OpenGL 在 Qt 中显示来自 DirectShow 的原始图像数据

在 Qml 中从字节数组加载到图像

QT WebEngine 和 JavaScript 无法加载 .PNG 图像

Xcode:从核心数据中的图像数据延迟加载图像