2014-12-07 57 views
4

我想从QImage创建QByteArray,但尽管我尝试了很多变化,我无法处理它。如何将QImage转换为QByteArray?

什么我做的是:

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) 

但是错误代码是返回无效数据。我认为将QImage转换为QByteArray是错误的。请你能帮助我如何转换为QByteArray?

回答

4

你可以这样做:

QImage img_enrll; 
QByteArray arr; 
QBuffer buffer(&arr); 
buffer.open(QIODevice::WriteOnly); 
img_enrll.save(&buffer, "yourformat"); 

写好,如果你需要这个序列,你是用QDataStream更好。

+0

呵呵,谢谢,我之前也试过这个解决方案。但QDataStream让我很好的想法如何解决这个问题。而且它工作正常:) – goGud 2014-12-07 14:43:18

+0

嗯,我已经看过Qt文档中的这个解决方案,但在我的情况下,缓冲区仍然是空的。即,'Q_ASSERT(buffer.data()。size()> 0);'抛出一个异常。 当然,我检查了QImage是有效的:我已经从文件中加载它,转换为QPixmap并将其显示在QLabel中。 – 2017-01-26 13:15:04