本页内容

QImageIOHandler Class

QImageIOHandler 类定义了 Qt 中所有图像格式的通用图像 I/O 接口。更多内容...

头文件: #include <QImageIOHandler>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

注意:本类中的所有函数均为可重入函数。

公共类型

enum ImageOption { Size, ClipRect, ScaledSize, ScaledClipRect, Description, …, ImageTransformation }
enum Transformation { TransformationNone, TransformationMirror, TransformationFlip, TransformationRotate180, TransformationRotate90, …, TransformationRotate270 }
flags Transformations

公共函数

QImageIOHandler()
virtual ~QImageIOHandler()
virtual bool canRead() const = 0
virtual int currentImageNumber() const
virtual QRect currentImageRect() const
QIODevice *device() const
QByteArray format() const
virtual int imageCount() const
virtual bool jumpToImage(int imageNumber)
virtual bool jumpToNextImage()
virtual int loopCount() const
virtual int nextImageDelay() const
virtual QVariant option(QImageIOHandler::ImageOption option) const
virtual bool read(QImage *image) = 0
void setDevice(QIODevice *device)
void setFormat(const QByteArray &format)
void setFormat(const QByteArray &format) const
virtual void setOption(QImageIOHandler::ImageOption option, const QVariant &value)
virtual bool supportsOption(QImageIOHandler::ImageOption option) const
virtual bool write(const QImage &image)

静态公共成员

(since 6.0) bool allocateImage(QSize size, QImage::Format format, QImage *image)

详细说明

Qt 使用 QImageIOHandler 通过QImageReader 和QImageWriter 读写图像。您还可以从该类派生,利用 Qt 的插件机制编写自己的图像格式处理程序。

调用setDevice() 向处理程序分配设备,调用setFormat() 向其分配格式。一个 QImageIOHandler 可能支持多种图像格式。若能从设备读取图像,canRead() 将返回true ;若图像读取或写入成功,read() 和write() 将返回 true。

QImageIOHandler 还通过以下函数支持动画格式:loopCount()、imageCount()、nextImageDelay() 和currentImageNumber()。

为了确定图像处理程序支持哪些选项,Qt 会调用supportsOption() 和setOption()。如果您能支持ImageOption 枚举中的任何选项,请务必重写这些函数。

要编写自己的图像处理程序,您至少必须重写canRead() 和read()。然后创建一个能够生成该处理程序的QImageIOPlugin 。最后,安装您的插件,QImageReader 和QImageWriter 便会自动加载该插件并开始使用它。

另请参阅 QImageIOPlugin 、QImageReader 以及QImageWriter 。

成员类型文档

enum QImageIOHandler::ImageOption

此枚举描述了QImageIOHandler 所支持的各种选项。其中一些选项用于查询图像的属性,另一些则用于切换图像的写入方式。

常量值描述
QImageIOHandler::Size0图像的原始尺寸。支持此选项的处理程序应从图像元数据中读取图像尺寸,并通过option()方法将该尺寸作为QSize 返回。
QImageIOHandler::ClipRect1裁剪矩形,即 ROI(感兴趣区域)。支持此选项的处理程序应在应用任何其他变换之前,仅通过 `read()` 从原始图像中读取提供的 `QRect ` 区域。
QImageIOHandler::ScaledSize4图像的缩放尺寸。支持此选项的处理程序应在应用任何裁剪矩形变换(ClipRect)后,将图像缩放至给定的尺寸(QSize )。如果处理程序不支持此选项,QImageReader 将在读取图像后执行缩放操作。
QImageIOHandler::ScaledClipRect3图像的缩放后裁剪矩形(或 ROI,感兴趣区域)。 支持此选项的处理程序应在应用任何缩放(ScaleSize)或常规裁剪(ClipRect)操作后,应用所提供的裁剪矩形(QRect )。如果处理程序不支持此选项,QImageReader 将在读取图像后应用缩放后的裁剪矩形。
QImageIOHandler::Description2图像描述。某些图像格式(如 GIF 和 PNG)允许将文本或注释嵌入图像数据中(例如,用于存储版权信息)。 通常,文本以键值对的形式存储,但某些格式将所有文本存储在一个连续的块中。QImageIOHandler 会将文本作为单个QString 返回,其中键和值用 ':' 分隔,键值对之间用两个换行符分隔(\n\n )。 例如,“Title: Sunset\n\nAuthor : Jim Smith\nSarah Jones\n\n ”。将文本存储在单一数据块中的格式可以使用“Description”作为键。
QImageIOHandler::CompressionRatio5图像数据的压缩比。支持此选项的处理程序应在写入时根据该选项的值(一个整数)设置其压缩率。
QImageIOHandler::Gamma6图像的伽马值。支持此选项的处理程序应在写入时根据该选项的值(一个浮点数)设置图像的伽马值。
QImageIOHandler::Quality7图像的质量级别。支持此选项的处理程序在写入时,应根据该选项的值(一个整数)设置图像的质量级别。
QImageIOHandler::Name8图像的名称。支持此选项的处理程序应在读取时从图像元数据中获取名称并将其作为QString 返回;在写入图像时,应将名称存储在图像元数据中。
QImageIOHandler::SubType9图像的子类型。支持此选项的处理程序可在读写图像时利用子类型值。例如,PPM 处理程序的子类型值可能为“ppm”或“ppmraw”。
QImageIOHandler::IncrementalReading10支持此选项的处理程序应分多次读取图像,如同处理动画一般。QImageReader 将把该图像视为动画。
QImageIOHandler::Endianness11图像的字节序。某些图像格式可以以大端序(BigEndian)或小端序(LittleEndian)形式存储。支持字节序(Endianness)的处理程序会根据该选项的值来确定图像应如何存储。
QImageIOHandler::Animation12支持动画的图像格式在调用supportsOption() 时,此选项的值为 true;否则,返回 false。
QImageIOHandler::BackgroundColor13某些图像格式允许指定背景色。支持 BackgroundColor 的处理程序在读取图像时,会将背景色初始化为该选项的值(即QColor )。
QImageIOHandler::ImageFormat14处理程序返回的图像数据格式。该格式可以是QImage::Format 中列出的任何格式。
QImageIOHandler::SupportedSubTypes15支持不同保存变体的图像格式应在此选项中返回支持的变体名称列表(QList<QByteArray>)。
QImageIOHandler::OptimizedWrite16支持此选项的处理程序在写入时应启用优化标志。
QImageIOHandler::ProgressiveScanWrite17支持此选项的处理程序应将图像写入为渐进式扫描图像。
QImageIOHandler::ImageTransformation18支持此选项的处理程序可以读取图像的变换元数据。支持此选项的处理程序不应自行应用变换。

enum QImageIOHandler::Transformation
flags QImageIOHandler::Transformations

该枚举描述了某些图像格式所支持的各种变换或方向,通常通过EXIF实现。

常量值描述
QImageIOHandler::TransformationNone0不应应用任何变换。
QImageIOHandler::TransformationMirror1将图像水平翻转。
QImageIOHandler::TransformationFlip2将图像垂直翻转。
QImageIOHandler::TransformationRotate180TransformationMirror | TransformationFlip将图像旋转 180 度。这相当于同时进行水平和垂直镜像。
QImageIOHandler::TransformationRotate904将图像旋转 90 度。
QImageIOHandler::TransformationMirrorAndRotate90TransformationMirror | TransformationRotate90先将图像水平翻转,然后旋转 90 度。
QImageIOHandler::TransformationFlipAndRotate90TransformationFlip | TransformationRotate90将图像垂直翻转,然后旋转 90 度。
QImageIOHandler::TransformationRotate270TransformationRotate180 | TransformationRotate90将图像旋转 270 度。这相当于先进行水平和垂直镜像,然后旋转 90 度。

“变换”类型是QFlags<Transformation> 的 typedef 定义。它存储了变换值的按“或”运算组合。

另请参阅 QImageReader::transformation()、QImageReader::setAutoTransform() 和QImageWriter::setTransformation()。

成员函数文档

QImageIOHandler::QImageIOHandler()

创建一个 QImageIOHandler 对象。

[virtual noexcept] QImageIOHandler::~QImageIOHandler()

销毁QImageIOHandler 对象。

[static, since 6.0] bool QImageIOHandler::allocateImage(QSize size, QImage::Format format, QImage *image)

这是子类中读取函数的一个便捷方法。如果所需的内存分配会超过当前的分配限制,图像格式处理程序必须拒绝加载该图像。该函数会检查参数和限制,并在条件有效且需要时进行内存分配。返回成功后,image 将是一个有效的、已分离的QImage ,其参数为给定的size 和format 。

该函数在 Qt 6.0 中引入。

另请参阅 QImageReader::allocationLimit()。

[pure virtual] bool QImageIOHandler::canRead() const

如果能够从设备读取图像(即支持该图像格式、可以读取该设备,且初始头信息表明可以读取该图像),则返回true ;否则返回false 。

在重写 canRead() 时,请确保 I/O 设备 (device()) 保持其原始状态(例如,使用 peek() 而不是read())。

另请参阅 read() 和QIODevice::peek()。

[virtual] int QImageIOHandler::currentImageNumber() const

对于支持动画的图像格式,该函数返回当前图像在动画序列中的序号。如果在调用该函数之前尚未通过read()加载任何图像,则返回-1。序列中第一张图像的序号为0。

如果图像格式不支持动画,则返回 0。

另请参阅 read()。

[virtual] QRect QImageIOHandler::currentImageRect() const

返回当前图像的矩形区域。如果该图像未定义矩形区域,则返回空的 QRect()。

此函数在动画制作中非常有用,因为动画中可能每次只更新帧的一部分。

QIODevice *QImageIOHandler::device() const

返回当前分配给QImageIOHandler 的设备。如果尚未分配设备,则返回nullptr 。

另请参阅 setDevice()。

QByteArray QImageIOHandler::format() const

返回当前分配给QImageIOHandler 的格式。如果未分配任何格式,则返回空字符串。

另请参阅 setFormat()。

[virtual] int QImageIOHandler::imageCount() const

对于支持动画的图像格式,此函数返回动画中的图像张数。如果图像格式不支持动画,或者无法确定图像张数,则返回 0。

默认实现中,若canRead()返回true ,则返回1;否则返回0。

[virtual] bool QImageIOHandler::jumpToImage(int imageNumber)

对于支持动画的图像格式,该函数会跳转到序列号为imageNumber 的图像。接下来对read() 的调用将尝试读取该图像。

默认实现不执行任何操作,并返回false 。

[virtual] bool QImageIOHandler::jumpToNextImage()

对于支持动画的图像格式,此函数会跳转到下一帧图像。

默认实现不执行任何操作,并返回false 。

[virtual] int QImageIOHandler::loopCount() const

对于支持动画的图像格式,该函数返回动画应循环播放的次数。如果图像格式不支持动画,则返回 0。

[virtual] int QImageIOHandler::nextImageDelay() const

对于支持动画的图像格式,此函数返回读取下一帧图像前需要等待的毫秒数。如果图像格式不支持动画,则返回 0。

[virtual] QVariant QImageIOHandler::option(QImageIOHandler::ImageOption option) const

返回赋值给option 的值,该值以QVariant 的形式返回。该值的类型取决于选项。例如,option(Size) 返回一个QSize 变体。

另请参阅 setOption() 和supportsOption()。

[pure virtual] bool QImageIOHandler::read(QImage *image)

从设备读取一张图片,并将其存储在image 中。如果图片读取成功,则返回true ;否则返回false。

对于支持增量加载的图像格式以及动画格式,图像处理程序可以假设image 指向上一帧。

另请参阅 canRead()。

void QImageIOHandler::setDevice(QIODevice *device)

将QImageIOHandler 的设备设置为device 。图像处理程序在读取和写入图像时将使用此设备。

该设备只能设置一次,并且必须在调用canRead()、read()、write(等函数之前进行设置。如果需要读取多个文件,请构建多个相应的QImageIOHandler 子类的实例。

另请参阅 device()。

void QImageIOHandler::setFormat(const QByteArray &format)

将QImageIOHandler 的格式设置为format 。该格式对于支持多种图像格式的处理程序最为有用。

另请参阅 format()。

void QImageIOHandler::setFormat(const QByteArray &format) const

将QImageIOHandler 的格式设置为format 。该格式对于支持多种图像格式的处理程序最为有用。

该函数被声明为 const,以便可以从canRead() 中调用它。

另请参阅 format()。

[virtual] void QImageIOHandler::setOption(QImageIOHandler::ImageOption option, const QVariant &value)

将选项option 设置为值value 。

另请参阅 option() 和ImageOption 。

[virtual] bool QImageIOHandler::supportsOption(QImageIOHandler::ImageOption option) const

如果QImageIOHandler 支持选项option ,则返回true ;否则返回false 。例如,如果QImageIOHandler 支持Size 选项,则supportsOption(Size)必须返回true。

另请参阅 setOption() 和option()。

[virtual] bool QImageIOHandler::write(const QImage &image)

将图像image 写入指定的设备。成功时返回true ;否则返回false 。

默认实现不执行任何操作,仅返回false 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.