16,818
社区成员




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