QImageReader、QImageWriter QImageReader、QImageWritereads
bigegpt 2024-12-23 08:48 4 浏览
QImageReader
一、描述
QImageReader 类提供了一个独立于格式的接口,用于从文件或其他设备中读取图像。
读取图像最常见的方法是通过 QImage 和 QPixmap 。与它们相比,QImageReader 可以在读取图像时提供更多控制。例如,可以通过调用 setScaledSize() 将图像读取为特定大小,并且可以通过调用 setClipRect() 选择一个剪辑矩形,有效地仅加载图像的一部分。根据图像格式的底层支持,这可以节省内存并加快图像的加载速度。
QImageReader 假定对分配的文件或设备具有独占控制权。在 QImageReader 对象的生命周期内修改分配的文件或设备的任何尝试都将产生未定义的结果。
二、类型成员
1、enum QImageReader::ImageReaderError:此枚举描述了使用 QImageReader 读取图像时可能发生的不同类型的错误。
FileNotFoundError:没有找到具有该名称的文件。如果文件名不包含扩展名,并且 Qt 不支持具有正确扩展名的文件,也会发生这种情况。
- DeviceError:读取图像时遇到设备错误。
- UnsupportedFormatError:Qt 不支持请求的图像格式。
- InvalidDataError:图像数据无效,无法从中读取图像。例如图像文件损坏。
- UnknownError:发生未知错误。
三、成员函数
1、【static】void setAllocationLimit(int mbLimit)
设置分配限制为 mbLimit 兆字节。需要超过此限制的 QImage 内存分配的图像将被拒绝。如果 mbLimit 为 0,分配大小检查将被禁用。
此限制有助于应用程序避免因加载损坏的图像文件而意外使用大量内存。通常不需要更改它。 对于所有常用的图像尺寸,默认限制足够大。
2、void setAutoDetectImageFormat(bool enabled)
设置启用 / 禁用图像格式自动检测。默认启用自动检测。
3、void setAutoTransform(bool enabled)
设置 read() 返回的图像是否自动应用转换元数据。
QImageIOHandler::Transformations transformation()
返回图像的转换元数据,包括图像方向。如果格式不支持转换元数据,则返回 TransformationNone。
enum QImageIOHandler::Transformation:此枚举描述了某些图像格式支持的不同转换或方向。
- TransformationNone:不应应用任何转换。
- TransformationMirror:水平镜像图像。
- TransformationFlip:垂直镜像图像。
- TransformationRotate:将图像旋转 180 度。
- TransformationRotate90:将图像旋转 90 度。
- TransformationMirrorAndRotate90:水平镜像图像,然后将其旋转 90 度。
- TransformationFlipAndRotate90:垂直镜像图像,然后将其旋转 90 度。
- TransformationRotate270:将图像旋转 270 度。 这与水平、垂直镜像然后旋转 90 度相同。
4、void setBackgroundColor(const QColor &color)
设置背景颜色。支持此操作的图像格式在读取图像之前将背景初始化为此颜色。
5、bool canRead()
是否可以为设备读取图像(即支持图像格式,并且设备似乎包含有效数据)
这是一个轻量级函数,它只进行快速测试以查看图像数据是否有效。如果图像数据损坏,在 canRead() 返回 true 后 read() 仍可能返回 false。
对于支持动画的图像,canRead() 在读取所有帧后返回 false。
6、void setClipRect(const QRect &rect)
设置图像剪辑矩形(也称为 ROI,或感兴趣区域)。rect 的坐标相对于未转换的图像大小。
7、int currentImageNumber()
对于支持动画的图像格式,返回当前帧的序列号。如果图像格式不支持动画,则返回 0。
8、QRect currentImageRect()
对于支持动画的图像格式,此函数返回当前帧的矩形。 否则,返回一个空矩形。
9、void setDecideFormatFromContent(bool ignored)
如果 ignore 设置为 true,则将忽略指定的格式或文件扩展名,并仅根据数据流中的内容决定使用哪个图片插件。
设置此标志意味着加载所有图像插件。每个插件都会读取图像数据中的第一个字节并决定插件是否兼容。
这也会禁用自动检测图像格式。
10、QImageReader::ImageReaderError error()
返回最后发生的错误类型。
11、QString errorString()
返回最后发生的错误的描述。
12、void setFileName(const QString &fileName)
设置文件名。在内部将创建一个 QFile 对象并以 ReadOnly 模式打开它,并在读取图像时使用它。
如果 fileName 不包含文件扩展名,将遍历所有支持的扩展名,直到找到匹配的文件。
13、void setFormat(const QByteArray &format)
设置在读取图像时将使用的格式。format 是不区分大小写的文本字符串。
QImageReader reader;
reader.setFormat("png");
14、int imageCount()
对于支持动画的图像格式,返回动画中的图像总数。如果格式不支持动画,则返回 0。
如果发生错误,此函数返回 -1。
15、QImage::Format imageFormat()
返回图像的格式,而不实际读取图像内容。该格式描述了 read() 返回的图像格式,而不是实际图像的格式。
如果图像格式不支持此功能,则此函数返回无效格式。
16、【static】QByteArray imageFormat(const QString &fileName)
【static】QByteArray imageFormat(QIODevice *device)
如果支持,此函数返回文件 fileName 的图像格式。 否则,返回一个空字符串。
qDebug()<<QImageReader::imageFormat("D://www.jpg");//jpeg
17、【static】QList<QByteArray> imageFormatsForMimeType(const QByteArray &mimeType)
返回与 mimeType 对应的图像格式列表。
注意,必须在调用此函数之前创建 QGuiApplication 实例。
18、bool jumpToImage(int imageNumber)
对于支持动画的图片格式,该函数跳转到序号为 imageNumber 的图片,成功返回true,找不到对应的图片返回 false。
下一次调用 read() 将尝试读取此跳转的图像。
19、bool jumpToNextImage()
对于支持动画的图片格式,该函数会跳转到下一帧图片,成功则返回 true,动画中没有后续图片则返回 false。
20、int loopCount()
对于支持动画的图像格式,此函数返回动画应循环的次数。如果此函数返回 -1,则可能意味着动画应该永远循环,或者发生错误。如果发生错误,canRead() 将返回 false。
21、int nextImageDelay()
对于支持动画的图像格式,此函数返回等待显示动画下一帧的毫秒数。如果图像格式不支持动画,则返回 0。如果发生错误,此函数返回 -1。
22、QImage read()
从设备读取图像。成功时,返回读取的图像,否则返回一个空 QImage。可以调用 error() 来查找发生的错误类型,或者调用 errorString() 来获取错误描述。
对于支持动画的图像格式,重复调用 read() 将返回下一帧。读取所有帧后,将返回空图像。
bool read(QImage *image)
将设备中的图像读入 image。返回是否成功读入。
如果图像与即将读取的图像数据具有相同的格式和尺寸,则该函数可能不需要在读取前分配新的图像。正因为如此,它可以比另一个 read() 重载更快。
对于支持动画的图像格式,重复调用 read() 将返回下一帧。读取所有帧后,将返回空图像。
QImage icon(64, 64, QImage::Format_RGB32);
QImageReader reader("icon_64x64.bmp");
if (reader.read(&icon)) {
...
}
23、void setDevice(QIODevice *device)
设置设备。如果设备尚未打开,将尝试通过调用 open() 以 ReadOnly 模式打开设备。
24、void setQuality(int quality)
设置图像格式的质量。
一些图像格式,尤其是有损图像格式,需要在“结果图像的视觉质量”和“解码执行时间”之间进行权衡。此函数设置支持它的图像格式的权衡级别。
在缩放图像读取的情况下,质量设置也可能影响视觉质量和缩放算法的执行速度之间的权衡水平。
质量的取值范围取决于图像格式。例如,“jpeg”格式支持从 0(低视觉质量)到 100(高视觉质量)的质量范围。
25、void setScaledClipRect(const QRect &rect)
设置缩放的剪辑矩形。
缩放的剪辑矩形是在图像缩放后应用的剪辑矩形(也称为 ROI 或感兴趣区域)。
26、void setScaledSize(const QSize &size)
设置图像的缩放大小。
27、QSize size() 实用
返回图像的大小,而不实际读取图像内容。如果图像格式不支持此功能,则此函数返回无效大小。
28、【static】QList<QByteArray> supportedImageFormats()
返回 QImageReader 支持的图像格式列表。
必须在调用此函数之前创建 QApplication 实例。
默认情况下,Qt 可以读取以下格式:
29、【static】QList<QByteArray> supportedMimeTypes()
返回支持的 MIME 类型列表。
必须在调用此函数之前创建 QApplication 实例。
30、bool supportsAnimation()
图像格式是否支持动画。
31、bool supportsOption(QImageIOHandler::ImageOption option) const
是否支持选项。
不同的图像格式支持不同的选项。调用该函数来判断当前格式是否支持某个选项。
例如,PNG 格式允许将文本嵌入到图像的元数据中(text()),而 BMP 格式允许确定图像的大小,而无需将整个图像加载到内存中(size())。
enum QImageIOHandler::ImageOption:此枚举描述了 QImageIOHandler 支持的不同选项。一些选项用于查询图像的属性,而其他选项用于切换应写入图像的方式。
- Size:图像的原始大小。
- ClipRect:剪辑矩形,或 ROI(感兴趣区域)。
- ScaledSize:图像的缩放大小。
- ScaledClipRect:图像的缩放剪辑矩形(或 ROI,感兴趣区域)。支持此选项的处理程序应在应用任何缩放 (ScaleSize) 或常规剪辑 (ClipRect) 后应用提供的剪辑矩形 (QRect)。
- Description:图像描述。某些图像格式,例如 GIF 和 PNG,允许将文本嵌入到图像数据中(例如,用于存储版权信息)。
- CompressionRatio:图像数据的压缩率。支
- Gamma:图像的伽玛级别。
- Quality:图像的质量等级。
- Name:图像的名称。
- SubType:图像的子类型。
- IncrementalReading:支持此选项的处理程序预计会分几次读取图像。QImageReader 会将图像视为动画。
- Endianness:图像的字节序。
- Animation:动画类型的图像格式。
- BackgroundColor:背景颜色,某些图像格式允许指定背景颜色。
- ImageFormat:处理程序返回的图像数据格式。这可以是 QImage::Format 中列出的任何格式。
- SupportedSubTypes:支持的子类型名称列表(QList<QByteArray>)。
- OptimizedWrite:写入时打开优化标志。
- ProgressiveScanWrite:将图像写入为逐行扫描图像。
- ImageTransformation:可以读取图像的转换元数据。
32、QString text(const QString &key)
返回与 key 关联的图像文本。
对此选项的支持是通过 QImageIOHandler::Description 实现的。
33、QStringList textKeys()
返回此图像的文本键。可以将这些键与 text() 一起使用来列出某个键的图像文本。
对此选项的支持是通过 QImageIOHandler::Description 实现的。
34、QImageIOHandler::Transformations transformation()
返回图像的转换元数据,包括图像方向。如果格式不支持转换元数据,则返回 QImageIOHandler::TransformationNone。
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
点击这里:「链接」
QImageWriter
一、描述
QImageWriter 类提供了一个独立于格式的接口,用于将图像写入文件或其他设备。
QImageWriter 支持在存储图像之前设置格式特定选项,例如压缩级别和质量。如果不需要这些选项,那不应该使用此类而是使用 QImage::save() 或 QPixmap::save()。
QImageWriter 假定对分配的文件或设备具有独占控制权。在 QImageWriter 对象的生命周期内修改分配的文件或设备的任何尝试都将产生未定义的结果。
QString imagePath(QStringLiteral("path/image.jpeg"));
QImage image(64, 64, QImage::Format_RGB32);
image.fill(Qt::red);
{
QImageWriter writer(imagePath);
writer.write(image);
}
QFile::rename(imagePath,QStringLiteral("path/other_image.jpeg"));
二、类型成员
1、enum QImageWriter::ImageWriterError:此枚举描述了使用 QImageWriter 写入图像时可能发生的错误。
- DeviceError:在写入图像数据时遇到设备错误。
- UnsupportedFormatError:Qt 不支持请求的图像格式。
- InvalidImageError:试图写入一个无效的 QImage。
- UnknownError:发生未知错误。
三、成员函数
1、bool canWrite()
是否可以写入图像,即支持图像格式并且分配的设备已打开可供读取。
2、QImageWriter::ImageWriterError error()
返回上次发生的错误类型。
3、QString errorString()
返回发生的最后一个错误的描述。
4、【static】QList<QByteArray> imageFormatsForMimeType(const QByteArray &mimeType)
返回与 mimeType 对应的图像格式列表。
和 QImageReader::imageFormatsForMimeType() 一样。
5、void setCompression(int compression)
设置图像压缩格式特定功能。对于不支持设置压缩的图像格式,此值将被忽略。
compression 的取值范围取决于图像格式。例如,“tiff”格式支持两个值,0(无压缩)和 1(LZW 压缩)。
6、void setDevice(QIODevice *device)
设置设备。如果设备尚未打开,则将尝试通过调用 open() 以 WriteOnly 模式打开设备。
7、void setFileName(const QString &fileName)
设置文件名。在内部,会创建一个 QFile 并以 WriteOnly 模式打开它,并在写入图像时使用该文件。
8、void setFormat(const QByteArray &format)
设置在写入图像时将使用的格式,以格式化。format 是不区分大小写的文本字符串。
9、void setOptimizedWrite(bool optimize)
这是一个特定于图像格式的函数,在写入图像时设置优化标志。对于不支持设置优化标志的图像格式,此值将被忽略。默认值为 false。
10、void setProgressiveScanWrite(bool progressive)
这是一个特定于图像格式的功能,在写入图像时打开逐行扫描。对于不支持设置逐行扫描标志的图像格式,该值将被忽略。默认值为 false。
11、void setQuality(int quality)
设置图像质量。
一些图像格式,尤其是有损图像格式,需要在 “结果图像的视觉质量”和 “编码执行时间和压缩级别”之间进行权衡。此函数设置支持它的图像格式的权衡级别。对于其他格式,此值将被忽略。
质量的取值范围取决于图像格式。例如,“jpeg”格式支持从 0(低视觉质量,高压缩)到 100(高视觉质量,低压缩)的质量范围。
12、void setText(const QString &key, const QString &text)
将与 key 关联的图像文本设置为 text。
例如用于存储版权信息:
QImage image("some/image.jpeg");
QImageWriter writer("images/outimage.png", "png");
writer.setText("Author", "John Smith");
writer.write(image);
13、void setTransformation(QImageIOHandler::Transformations transform)
设置图像转换元数据。见这个。
14、【static】QList<QByteArray> supportedImageFormats()
返回支持的图像格式列表。必须在调用此函数之前创建 QApplication 实例。
默认情况下,可以写入以下格式:
15、【static】QList<QByteArray> supportedMimeTypes()
返回支持的 MIME 类型列表。必须在调用此函数之前创建 QApplication 实例。
16、bool supportsOption(QImageIOHandler::ImageOption option)
是否支持选项。
不同的图像格式支持不同的选项。调用该函数来判断当前格式是否支持某个选项。
QImageWriter writer(fileName);
if (writer.supportsOption(QImageIOHandler::Description))
writer.setText("Author", "John Smith");
17、bool write(const QImage &image)
将图像写入分配的设备或文件名。返回是否写入成功。如果操作失败,可以调用 error() 来查找发生的错误类型,或者调用 errorString() 来获取错误描述。
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
点击这里:「链接」
原文链接:https://blog.csdn.net/kenfan1647/article/details/126099395
原文链接:https://blog.csdn.net/kenfan1647/article/details/126138123
- 上一篇:Qt绘图原理详解 qt绘图教程
- 下一篇:小谈一下Qt的绘制引擎 qt 绘制
相关推荐
- 了解Linux目录,那你就了解了一半的Linux系统
-
大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...
- Linux命令,这些操作要注意!(linux命令?)
-
刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...
- Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!
-
在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...
- linux必学的60个命令(linux必学的20个命令)
-
以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....
- 提高工作效率的--Linux常用命令,能够决解95%以上的问题
-
点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...
- 15 个实用 Linux 命令(linux命令用法及举例)
-
Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...
- Linux 常用命令集合(linux常用命令全集)
-
系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...
- Linux的常用命令就是记不住,怎么办?
-
1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...
- Linux常用文件操作命令(linux常用文件操作命令有哪些)
-
ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...
- Linux 常用命令(linux常用命令)
-
日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E...
- 简单粗暴收藏版:Linux常用命令大汇总
-
号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...
- 「Linux」linux常用基本命令(linux常用基本命令和用法)
-
Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...
- Linux的常用命令就是记不住,怎么办?于是推出了这套教程
-
1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...
- Linux的30个常用命令汇总,运维大神必掌握技能!
-
以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...
- Linux/Unix 系统中非常常用的命令
-
Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)