13

我正在尝试从 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

3 回答 3

13

你可以这样做:

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

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

于 2014-12-07T14:34:39.690 回答
6

尝试这个:

QByteArray arr = QByteArray::fromRawData((const char*)img.bits(), img.byteCount());
于 2019-01-22T07:47:19.200 回答
0

就我而言,我需要一个深层副本,所以有效的是:

QByteArray arr(img.byteCount(), Qt::Uninitialized) // or resize if it already exists
memcpy(arr.data(), img.constBits(), img.byteCount());
于 2021-05-21T20:50:01.740 回答