• 10639阅读
  • 12回复

怎样保存为JPG图片 [复制链接]

上一主题 下一主题
离线lugaideath
 

只看楼主 倒序阅读 楼主  发表于: 2009-12-02
我把jpg图片加载到QGriphicsPixmapitem,或者QPixmap中,然后再取去里面的图片!

加载到QGriphicsitem或者QPixmap后就已经把图片改成png了,取出来都是png了,可以做到不变吗?或者改成为jpg吗?
离线dbzhang800

只看该作者 1楼 发表于: 2009-12-02
QPixmap 内部是用于屏幕显示的数据,应该既不是 png 也不是jpg ...

楼主提到的取出来都是png了 是怎么取的?
离线dbzhang800

只看该作者 2楼 发表于: 2009-12-02
刚没看认真看楼主的标题,上贴是针对楼主正文的

保存图片 看 manual

QPixmap::save
离线lugaideath

只看该作者 3楼 发表于: 2009-12-03
er.....我表达不完整,我不是指保存文件,是保存到数据库里面!

一个原本30K的jpg图片保存到数据库后大小翻了十倍
离线dbzhang800

只看该作者 4楼 发表于: 2009-12-03
引用第3楼lugaideath于2009-12-03 17:41发表的  :
er.....我表达不完整,我不是指保存文件,是保存到数据库里面!
一个原本30K的jpg图片保存到数据库后大小翻了十倍

好好看看manual吧。

保存到 文件 和 QByteArray 是一样
而且对于后者,save  的 manual   中还举了一个现成的例子
离线lugaideath

只看该作者 5楼 发表于: 2009-12-04
不是的,assistant上说了,
QDataStream & operator>> ( QDataStream & stream, QPixmap & pixmap )

Format of the QDataStream Operators

QPixmap Save it as a PNG image.  

用QDataStream保存的下来的是PNG的
离线yb824
只看该作者 6楼 发表于: 2009-12-04
从哪里看出来是PNG的
离线dbzhang800

只看该作者 7楼 发表于: 2009-12-04
这个问题似乎你已经纠结了很多天了,从一开始就想让你自己去看manual,因为答案是现成的(保存jpg的话,无非是简单地把例子中的 “PNG” 换成"JPG")。
可是直到现在...
bool QPixmap::save ( QIODevice * device, const char * format = 0, int quality = -1 ) const
This is an overloaded function.
This function writes a QPixmap to the given device using the specified image file format and quality factor. This can be used, for example, to save a pixmap directly into a QByteArray:
  1.          QPixmap pixmap;
  2.          QByteArray bytes;
  3.          QBuffer buffer(&bytes);
  4.          buffer.open(QIODevice::WriteOnly);
  5.          pixmap.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format
离线lugaideath

只看该作者 8楼 发表于: 2009-12-04
保存成文件我知道可以保存成别的格式,我在assistant也看到例子了!

可是我现在是存到数据库

QByteArray bytes;
QDataStream ds(&bytes,QIODevice::WriteOnly);
ds << myPixmap;

就算myPixmap是jpg的图片,但经过了QDataStream后的QByteArray是png的了!
然后我要把QByteArray 通过insert语句插到数据库里面去!

save是保存成文件的,我不是要文件,我是要到二进制的数据存到mysql里面去
离线dbzhang800

只看该作者 9楼 发表于: 2009-12-04
就算myPixmap是jpg的图片,但经过了QDataStream后的QByteArray是png的了!
然后我要把QByteArray 通过insert语句插到数据库里面去!
save是保存成文件的,我不是要文件,我是要到二进制的数据存到mysql里面去


该说的在你以前的帖子中其实都提过了,QPixmap --> QByteArray,用save

直到现在你还这样说,我真无话可说了

尽管如此,如果你有心情的话,我希望你能给我解释一下下面的代码的功能:
  1.          QPixmap pixmap;
  2.          QByteArray bytes;
  3.          QBuffer buffer(&bytes);
  4.          buffer.open(QIODevice::WriteOnly);
  5.          pixmap.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format
离线lugaideath

只看该作者 10楼 发表于: 2009-12-04
谢谢了,代码要改!
因为之前你说的是用QDataStream的!
离线dbzhang800

只看该作者 11楼 发表于: 2009-12-04
引用第10楼lugaideath于2009-12-04 10:25发表的  :
谢谢了,代码要改!
因为之前你说的是用QDataStream的!


当时你提到QDataStream会多出4个字节的时候,我记得就说过了,用 save,如果用QDataStream,可以手动去掉前4个字节
离线lugaideath

只看该作者 12楼 发表于: 2009-12-05
恩!当时我以为你是让我保存成文件,但昨天你提一下我看了assistant,发现了save的另一个用法,谢谢
快速回复
限100 字节
 
上一个 下一个