• 6967阅读
  • 4回复

我怎么直接把QPixmap存到数据库里面,不用QDataStream [复制链接]

上一主题 下一主题
离线lugaideath
 

只看楼主 倒序阅读 楼主  发表于: 2009-11-27
如题,因为我采用QDataStream把QPixmap读成QByteArray后,存到数据库的数据会多了四个字节(意思就是如果PIxmap为200字节,那么变了QByteArray后就变了204字节)

我怎么做可以直接存到数据库呢?
离线dbzhang800

只看该作者 1楼 发表于: 2009-11-27
引用楼主lugaideath于2009-11-27 17:01发表的 我怎么直接把QPixmap存到数据库里面,不用QDataStream :
如题,因为我采用QDataStream把QPixmap读成QByteArray后,存到数据库的数据会多了四个字节(意思就是如果PIxmap为200字节,那么变了QByteArray后就变了204字节)
我怎么做可以直接存到数据库呢?


这个我不太清楚你所谓的pixmap为200字节是什么意思,你用QDataStream转成QByteArray,实际上QByteArray里面就是该pixmap对应png格式的数据。你如果想存成png外的其他格式,QPixmap save的manual中说的也比较清楚了
离线lugaideath

只看该作者 2楼 发表于: 2009-11-28
我知道,会变成png格式,但只要你试下就会发现
例如pixmap保存的图片大小为2*1024个字节,如果用QDataStream转成QByteArray后,QByteArray的大小为2*1024+4个字节的
离线dbzhang800

只看该作者 3楼 发表于: 2009-11-28
引用第2楼lugaideath于2009-11-28 11:40发表的  :
我知道,会变成png格式,但只要你试下就会发现
例如pixmap保存的图片大小为2*1024个字节,如果用QDataStream转成QByteArray后,QByteArray的大小为2*1024+4个字节的


哦,看了一下,是有这个现象。手册中是这么说的:

QDataStream & operator<< ( QDataStream & stream, const QPixmap & pixmap )
Writes the given pixmap to the given stream as a PNG image. Note that writing the stream to a file will not produce a valid image file.
See also QPixmap::save()


具体说来,
stream << pixmap
实际上是
stream << pixmap.toImage()

对于QImage,
如果 image 是一个 null image
那么
stream << (qint32)0
反之
stream << (qint32)1<<imagedata


如果你不想要这4个字节,最好还是用QPixmap 的save
当然你用DataStream 的话,可以直接去掉前面4个字节
(但有一点,DataStream是不断演化的,新老版本行为不完全相同,也不能保证以后的版本前面就是这么加4个字节)
[ 此帖被dbzhang800在2009-11-28 13:07重新编辑 ]
离线babybluema

只看该作者 4楼 发表于: 2010-04-10
学习了。
快速回复
限100 字节
 
上一个 下一个