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

25

我在读写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

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

如果需要进一步澄清,请告诉我(我也可以接受其他方法,我只需要能够读取和写入QPixmap到文件中! :));

1个回答

52

那看起来好像是一个非常冗长的方式(但你的评论更好地解释了):

对于写作:

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

阅读:

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

QBuffer非常适合在需要QIODevice并希望将其保留在内存中时使用,但如果您实际上要访问磁盘,那么它就是一个不必要的中间步骤。

编辑:

要将像素图等内容写入单个文件,建议使用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版本。


这个解决方案很好,但我需要能够将多个图像数据与文本保存到单个文件中。例如,我的文件将包含图片1标题,图片1信息...等 <相关的QPixmap数据>图片2标题,图片2信息...等 <相关的QPixmap数据>有什么建议吗? - Alex Wood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接