Qt之QImageWriter
简述
QImageWriter类为写入图像至文件或设备提供了一个独立的接口。QImageWriter支持格式特定的选项(如:质量和压缩率),可以在存储图像之前进行设置。如果不需要这些选项,可以使用QImage::save()或QPixmap::save()代替。
常用接口
公共函数
void setFileName(const QString & fileName)
为fileName设置文件名。在内部,QImageWriter将创建一个QFile,以只写模式( QIODevice::WriteOnly)打开它,并使用此文件写入图像。void setFormat(const QByteArray & format)
设置写入图像时的格式,格式不区分大小写。
QImageWriter writer;
writer.setFormat("png");
// 同writer.setFormat("PNG");
void setText(const QString & key, const QString & text)
设置与key相关的文本。用于一些有用的信息,例如:版权信息、关于图像的其它描述信息。bool supportsOption(QImageIOHandler::ImageOption option) const
如果writer支持选项option,返回true;否则返回false。不同的图像格式支持不同的选项。调用此函数,可以确定当前格式是否支持一个特定的选项。例如:PNG格式允许嵌入文字到图像的元数据(见text())。
QImageWriter writer(fileName);
if (writer.supportsOption(QImageIOHandler::Description))
writer.setText("Author", "Mr Wang");
void setQuality(int quality)
设置图像格式的质量。quality的取值范围依赖于图像格式。例如:JPEG格式支持从0(低视觉质量,高压缩率)到100(高视觉质量,低压缩率)范围。
bool canWrite() const
如果QImageWriter可以写入图像(即:图像格式支持,同时设备也可以写入)调用canWrite() 时会返回truebool write(const QImage & image)
将图像写入文件或设备,如果写入时出现任何错误,将返回false,可以调用error() 来查找发生错误的类型,或者通过errorString()获取可读性的描述。ImageWriterError error() const
返回上次发生的错误 - 错误类型。
QImageWriter::ImageWriterError枚举值:
常量 | 值 | 描述 |
---|---|---|
QImageWriter::DeviceError | 1 | QImageWriter写入图像数据时遇到设备错误,详细请查看设备问题。 |
QImageWriter::UnsupportedFormatError | 2 | Qt不支持的请求图像格式。 |
QImageWriter::UnknownError | 0 | 未知错误。如果调用write()后得到这个值,最有可能是QImageWriter的一个Bug。 |
- QString errorString() const
返回上次发生的错误 - 可读描述。
静态函数
QList<QByteArray> supportedImageFormats()
获取支持的图片格式QList<QByteArray> supportedMimeTypes()
获取支持的Mime类型
QList<QByteArray> imageFormats = QImageWriter::supportedImageFormats();
QList<QByteArray> mimeTypes = QImageWriter::supportedMimeTypes();
信息如下:
// imageFormats : ("bmp", "cur", "dds", "icns", "ico", "jp2", "jpeg", "jpg", "pbm", "pgm", "png", "ppm", "tif", "tiff", "wbmp", "webp", "xbm", "xpm")
// mimeTypes : ("", "image/bmp", "image/jp2", "image/jpeg", "image/png", "image/tiff", "image/vnd.microsoft.icon", "image/vnd.wap.wbmp", "image/webp", "image/x-dds", "image/x-icns", "image/x-portable-bitmap", "image/x-portable-graymap", "image/x-portable-pixmap", "image/x-xbitmap", "image/x-xpixmap")
示例
效果
源码
// 源图像
QImage image(":/Images/logo");
// 目标图像
QImageWriter writer("AuthorLogo.jpeg", "jpeg");
if (writer.supportsOption(QImageIOHandler::Description))
{
// 设置描述信息
writer.setText("Author", "Mr Wang");
writer.setText("Description", "Qter");
}
writer.setQuality(100);
if (writer.canWrite())
{
// 写入图片至文件AuthorLogo.jpeg
writer.write(image);
}
else
{
// 获取错误信息
QImageWriter::ImageWriterError error = writer.error();
QString strError = writer.errorString();
qDebug() << "Last Error : " << strError;
}
这时,就会根据源图像(:/Images/logo资源文件)生成一张名为AuthorLogo.jpeg的图像,并且图像里面包含”Author”“以及”Description”对应的信息。
为什么图片上看不到呢?(⊙o⊙)…这时因为保存的信息在图片的数据中,而并非直接绘制在图片上。
既然有QImageWriter,当然也会有对应的读取相关的类QImageReader,至于如何读取,敬请期待。。。下节更精彩。
注意:
- 图一:setQuality(100),质量很高,压缩率小(很大:131KB)。
- 图二:setQuality(0),质量很低,压缩率高(很小:9.69KB)。
Qt之QImageWriter的更多相关文章
- 《Qt 实战一二三》
简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的 ...
- 用qt代码怎样编写图片保存格式[qt4.6]
用qt代码怎样编写图片保存格式 qt提供了多个保存图片的接口,比较常用的接口如下 bool QPixmap::save ( const QString & fileName, const ch ...
- 每日一笔记之2:QT之坐标系统:
以前一直多单片机开发,也没怎么使用过大的显示器,第一次学习,备忘: QT画图系统. 绘图,通过QPainter类实现. Qt的绘图系统对底层函数进行了良好的封装,使得在屏幕和设备的绘图功能可能使用相同 ...
- 将vim作为QT开发的IDE
转载请注明链接与作者huihui1988 用了一段时间的vim,喜欢上了这种简洁高效的编辑器.恰逢正在学习QT中,于是将vim变成了开发QT的工具.以下是具体配置. 一.语法高亮支持: 1.打开VIM ...
- QT 二维图形 原理、发展及应用
转载自 网易博客:sun的博客 http://zhouyang340.blog.163.com/blog/static/3024095920126710504178/ 2D绘图 Qt4中的2D绘图部分 ...
- Qt 中一些常用类中文说明
Qt 中一些常用类中文说明是本文讲述的内容,这篇文章主要是介绍Qt 当中经常使用的类,采取的是使用字母索引的方式,下面的类是被经常使用的. QDataStream 为QIODevice提供了一串的二进 ...
- qt 5.2.1类和模块的关系图
QT│ ├─ActiveQt│ │ ActiveQt│ │ ActiveQtDepends│ │ ActiveQtVersion│ │ QAxAggregated│ │ QAxB ...
- Qt之QImageReader
简述 QImageReader类为从文件或设备读取图像提供了一个独立的接口. 读取图像最常用的方法是通过构造QImage和QPixmap,或通过调用QImage::load()和QPixmap::lo ...
- qt 2D绘图技巧
2D绘图 Qt4中的2D绘图部分称为Arthur绘图系统.它由3个类支撑整个框架,QPainter,QPainterDevice和QPainterEngine.QPainter用来执行具体的绘图相关操 ...
随机推荐
- PHP实现的毫秒定时器,同时解决进程不重复堆积
定时器任务,在WEB应用比较常见,如何使用PHP实现定时器任务,大致有两种方案:1)使用Crontab命令,写一个shell脚本,在脚本中调用PHP文件,然后定期执行该脚本:2)配合使用ignore_ ...
- 解决locate无法使用的问题
使用yum安装,locate的安装包名为mlocate 安装: yum -y install mlocate 更新: updatedb 无法使用:先下载
- Spring MVC中 提交表单报错400
背景: 在写SpringMVC表单提交的代码的时,在最后点击提交的时候总是会出现400的错误 原因: 主要原因就是表单提交的数据和对应实体类的属性无法完全匹配 解决方案: 查看我们提交的数据是否完全和 ...
- 2015 Multi-University Training Contest 5 hdu 5352 MZL's City
MZL's City Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- Opencv 视频转为图像序列
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50283303 基于OpenCV的视频转 ...
- Eureka Server的REST端点
Eureka Server的REST端点 Windows下面可以安装Curl: 使用more命令可以显示xml内容: D:\Java\IdeaProjects>more rest-api-tes ...
- Oracle字符乱码、数据越界訪问典型Bug分析
Oracle字符乱码.数据越界訪问典型Bug分析 前言: 作为乙方,在甲方客户那里验收阶段发现两个诡异Bug. 下面就问题来源.问题根因.解决方式.怎样避免做具体描写叙述. .且两 ...
- sizeof()函数的使用——————【Badboy】
1.sizeof的使用:sizeof操作符以字节形式给出了其操作数的存储大小. sizeof操作符不能用于函数类型,不全然类型或位字段.不全然类型指具有未知存储大小的数据类型,如未知存储大小的数组类型 ...
- Residual Networks <2015 ICCV, ImageNet 图像分类Top1>
本文介绍一下2015 ImageNet中分类任务的冠军--MSRA何凯明团队的Residual Networks.实际上.MSRA是今年Imagenet的大赢家.不单在分类任务,MSRA还用resid ...
- app-framework学习--nav的Scroller禁用与启用
app-framewor(jqmobi) nav的Scroller禁用与启用 写在panel 的 data-load 方法里 禁用 $.ui.scrollingDivs.menu_scroller. ...