【问题标题】:How to save a QPixmap Object to a file?如何将 QPixmap 对象保存到文件中?
【发布时间】:2011-01-26 17:11:21
【问题描述】:

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

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

如果需要进一步说明,请告诉我(我也愿意接受替代方法,我只需要能够读取 QPixmap 并将其写入文件即可!:));

【问题讨论】:

    标签: qt qpixmap


    【解决方案1】:

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

    写作:

    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 信息...等 图片 2 标题、图片 2 信息...等 有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多