将 QImage 保存到 QBuffer

Posted

技术标签:

【中文标题】将 QImage 保存到 QBuffer【英文标题】:Saving a QImage to QBuffer 【发布时间】:2015-07-10 15:20:39 【问题描述】:

我正在做这样的事情:

QImage image(width, height, QImage::Format_RGB32);
frame.fill(QColor(255, 255, 255).rgb());

QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream out(&buffer);

选项 1:

out << image;

选项 2:

out.writeRawData((char *) image.constBits(), image.byteCount()) ;

选项 1 很慢,我不确定选项 2 是否正确?

【问题讨论】:

【参考方案1】:

您可以使用QImage::save 直接写入QIODevice,无论是缓冲区还是文件。

image.save(buffer);

与选项 1 相比,选项 2 看起来很糟糕;从美学上讲,我当然更喜欢选项 1。但我更喜欢我提到的 API,而不是你提供的两个选项。

您可以阅读更多关于图像读/写的信息here。

【讨论】:

【参考方案2】:

我刚刚做了类似的事情

QByteArray byteArray;
QBuffer buffer(&byteArray);
image.save(&buffer, "PNG"); // writes the image in PNG format inside the buffer

要输出缓冲区,我会使用 QString,我用它来转换为 base64

QString imgBase64 = QString::fromLatin1(byteArray.toBase64().data()); 

【讨论】:

以上是关于将 QImage 保存到 QBuffer的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 中使用 QImage 而不制作 Qt 项目?

将 NSImage 加载到 QPixmap 或 QImage 中

可以将 QImage 文件内容加载到 QString 吗?

QImage::Format_mono 到 .png 和 QGraphicsScene

AVFrame到QImage的高效转换

将 cv::mat 转换为 QImage