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

时间:2010-03-12 06:17:07

标签: qt qpixmap

我无法读取和编写QByteArray数据到文件。

我的目标是将QPixmap数据保存到QByteArray中并将该QByteArray保存到文件中(能够从文件和QPixmap中读取此QByteArray)。我想使用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

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

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

1 个答案:

答案 0 :(得分:38)

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

写作:

QFile file("yourFile.png");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "PNG");

阅读:

QPixmap pixmap;
pixmap.load("yourFile.png");

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. */;

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

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

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