如何将QImage转换为QByteArray?

goG*_*Gud 9 c++ qt qtgui qimage qbytearray

我试图从QImage创建QByteArray,但是虽然我尝试了很多varient,但我无法处理它.

我在做的是:

QImage img_enrll; // <--- There is an image coming from another function. 

QByteArray arr((char*)img_enrll.bits(),img_enrll.byteCount());  // <-- convertion but I am not sure it is true or not. 

funcCheck((unsigned char*)arr.data(), arr.size(), 0, &sam, 1, &n);


virtual Error funcCheck (const uint8_t    src[],
                           size_t           src_len,
                           size_t           tout_ms,
                           IRawSample*      dst[],
                           size_t           dst_len,
                           size_t*          dst_n )
Run Code Online (Sandbox Code Playgroud)

但是,错误代码返回无效数据.我认为将QImage转换为QByteArray是错误的.请你能帮我转换成QByteArray吗?

lpa*_*app 9

你可以这样做:

QImage img_enrll;
QByteArray arr;
QBuffer buffer(&arr);
buffer.open(QIODevice::WriteOnly);
img_enrll.save(&buffer, "yourformat");
Run Code Online (Sandbox Code Playgroud)

写完之后,如果你需要这个用于序列化,你最好使用QDataStream.

  • 嗯,我在 Qt 文档中看到了这个解决方案,但在我的情况下缓冲区仍然为空。即,`Q_ASSERT(buffer.data().size() &gt; 0);` 抛出异常。当然,我已经检查了 QImage 是否有效:我已从文件加载它,转换为 QPixmap 并将其显示在 QLabel 中。 (2认同)

小智 6

尝试这个:

QByteArray arr = QByteArray::fromRawData((const char*)img.bits(), img.byteCount());
Run Code Online (Sandbox Code Playgroud)