qimage数据保存到文件,如何读取

wxf54318 2022-09-23 11:33:38

我想把qimage.bits()得到的图片数据存入文件后,从文件中读取数据并创建一个新的qimage,写入文件是成功的,但是创建新的qimage

失败。

上代码:

保存数据:

     m_imgPath= QString("%1/%2.png").arg(m_myPath, projName);
    unsigned char* data = m_image.bits();
    int size = m_image.sizeInBytes();
    if (size != 0)
    {
        QFile file(m_imgPath);
        file.open(QIODevice::WriteOnly);
        QDataStream out(&file);
        out.writeRawData(reinterpret_cast<const char*>(data),size);
    }

读取数据:

       QFile file(m_imgPath);
        file.open(QIODevice::ReadWrite);
       QByteArray imageData = file.readAll();
       file.close();
       m_image= QImage::fromData(imageData);

构造的m_image是空的

...全文
459 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mideum 2022-09-23
  • 打赏
  • 举报
回复

为了帮助理解再补充一些点吧
1.如果用你的那个保存方法,根本用不着QDataStream,直接file.write(reinterpret_cast<const char*>(data),size)就可以了效果一样的,所以你那个就不是QDataStream的正确用法
2.为什么用你的保存方法不能读取呢,你保存的等于是这个图像的raw数据,而QImage::fromData这个方法则是读取一张图片的数据,也就是它要的不是raw数据,而是有文件头的比如bmp啊jpg这种数据,读取raw数据要用构造函数里的方法,但是同时你也要知道图片的信息比如长宽还有格式等
所以我觉得还是直接用QDataStream的>>和<<更适合你

mideum 2022-09-23
  • 打赏
  • 举报
回复

不用想这么多,用QDataStream就行了,很多Qt的类已经预先准备好用QDataStream保存和读取的方法了
保存的时候

QImage image = ...;
QFile f(...);
if(f.open(QIODevice::WriteOnly | QIODevice::Truncate)){
    QDataStream ds(&f);
    ds << image;
    f.close();
}

读取的时候

QImage image;
QFile f(...);
if(f.open(QIODevice::ReadOnly)){
    QDataStream ds(&f);
    ds >> image;
    f.close();
}

16,818

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧