如何将QPixmap对象保存到文件?

Ale*_*ood 19 qt qpixmap

我无法读取和写入QByteArray数据到文件.

我的目标是将QPixmap数据保存到QByteArray中,并将QByteArray保存到文件中(能够从文件读回QByteArray并进入QPixmap).我想使用QPixmap文档中的以下代码:

     QPixmap pixmap(<image path>);  
     QByteArray bytes;
     QBuffer buffer(&bytes);
     buffer.open(QIODevice::WriteOnly);
     pixmap.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format
Run Code Online (Sandbox Code Playgroud)

在将缓冲区写入文件后,我希望能够使用QPixmap :: loadFromData()函数检索QByteArray并将其加载回QPixmap.

如果需要进一步澄清,请告诉我(我也对其他方法持开放态度,我只需要能够将QPixmap读写到文件中!:));

Kal*_*son 40

这似乎是一个很长的路要走(但你的评论更好地解释):

写作:

QFile file("yourFile.png");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "PNG");
Run Code Online (Sandbox Code Playgroud)

阅读:

QPixmap pixmap;
pixmap.load("yourFile.png");
Run Code Online (Sandbox Code Playgroud)

QBuffer当你需要一个QIODevice并且想要将它保存在内存中时很棒,但如果你真的要去磁盘,那么这是一个不必要的中间步骤.

编辑:

要将pixmaps和其他内容写入单个文件,我建议您使用QDataStream.

写作:

QFile file("outfile.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << QString("almost any qt value object")
    << yourQPixMap << yourQList /* << etc. */;
Run Code Online (Sandbox Code Playgroud)

然后,你可以做同样的阅读:

QFile file("infile.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in >> firstQString >> yourQPixmap >> yourList /* >> etc. */;
Run Code Online (Sandbox Code Playgroud)

您需要确保读取与编写它们相同的对象.为了避免将来出现兼容性问题,请明确设置QDataStream版本.