QImageIOHandler 类

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

头文件 #include <QImageIOHandler>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui

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

公共类型

枚举ImageOption { Size, ClipRect, ScaledSize, ScaledClipRect, Description, …, ImageTransformation }
枚举Transformation { TransformationNone, TransformationMirror, TransformationFlip, TransformationRotate180, TransformationRotate90, …, TransformationRotate270 }
标志Transformations

公共函数

QImageIOHandler()
virtual~QImageIOHandler()
virtual boolcanRead() const = 0
virtual intcurrentImageNumber() const
virtual QRectcurrentImageRect() const
QIODevice *device() const
QByteArrayformat() const
virtual intimageCount() const
virtual booljumpToImage(int imageNumber)
virtual booljumpToNextImage()
virtual intloopCount() const
virtual intnextImageDelay() const
virtual QVariantoption(QImageIOHandler::ImageOption option) const
virtual boolread(QImage *image) = 0
voidsetDevice(QIODevice *device)
voidsetFormat(const QByteArray &format)
voidsetFormat(const QByteArray &format) const
virtual voidsetOption(QImageIOHandler::ImageOption option, const QVariant &value)
virtual boolsupportsOption(QImageIOHandler::ImageOption option) const
virtual boolwrite(const QImage &image)

静态公共成员

(自 6.0) boolallocateImage(QSize size, QImage::Format format, QImage *image)

详细描述

Qt 使用 QImageIOHandler 通过 QImageReaderQImageWriter 来读取和写入图像。您还可以从这个类派生来自定义图像格式处理器,使用 Qt 的插件机制。

调用 setDevice() 将设备分配给处理程序,并调用 setFormat() 将格式分配给它。一个 QImageIOHandler 可能支持多种图像格式。如果可以从设备读取图像,则 canRead() 返回 true,而如果对图像的读取或写入操作成功完成,则 read() 和 write() 返回 true。

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

为了确定图像处理程序支持哪些选项,Qt 将调用 supportsOption() 和 setOption()。如果您可以提供对 ImageOption 枚举中任何选项的支持,请务必重新实现这些函数。

要创建自己的图像处理程序,您至少需要重新实现 canRead() 和 read()。然后创建一个可以创建此处理程序的 QImageIOPlugin。最后,安装您的插件,然后 QImageReaderQImageWriter 将自动加载该插件并开始使用。

另请参阅QImageIOPluginQImageReaderQImageWriter

成员类型文档

enum QImageIOHandler::ImageOption

此枚举描述了 QImageIOHandler 支持的不同选项。一些选项用于查询图像属性,其他选项用于切换图像写入的方式。

常量描述
QImageIOHandler::Size0图像的原始大小。支持此选项的处理程序预计将从图像元数据中读取图像的大小,并通过 option() 返回此大小,作为一个 QSize
QImageIOHandler::ClipRect1剪辑矩形或感兴趣区域 (ROI)。支持此选项的处理程序预计在应用任何其他转换之前,将在 read() 中只读取提供的 QRect 区域。
QImageIOHandler::ScaledSize4图像的缩放大小。支持此选项的处理程序预计将根据提供的缩放大小(QSize)缩放图像,在应用任何剪辑矩形转换(ClipRect)之后。如果处理程序不支持此选项,则 QImageReader 将在读取图像后执行缩放。
QImageIOHandler::ScaledClipRect3图像的缩放剪辑矩形(或感兴趣区域,ROI)。支持此选项的处理程序预计将应用提供的缩放剪辑矩形(QRect),应用任何缩放(ScaleSize)或常规剪辑(ClipRect)之后。如果处理程序不支持此选项,则 QImageReader 将在读取图像后应用缩放剪辑矩形。
QImageIOHandler::Description2图像描述。一些图像格式,如GIF和PNG,允许将文本或注释嵌入到图像数据中(例如,用于存储版权信息)。通常文本以键值对的形式存储,但某些格式将所有文本存储在一个连续块中。《QImageIOHandler》返回一个text作为一QString,其中键和值由冒号(:)分隔,键值对由两个换行符(\n\n)分隔。例如:"标题:日落\n\n作者:吉姆·史密斯\n莎拉·琼斯\n\n"。存储文本在一个单独块中的格式可以使用“描述”作为键。
QImageIOHandler::CompressionRatio5图像数据的压缩比。支持此选项的处理程序在写入时预计会根据此选项的值(一个整数)设置其压缩率。
QImageIOHandler::Gamma6图像的伽玛级别。支持此选项的处理程序在写入时预计会根据此选项的值(一个浮点数)设置图像伽玛级别。
QImageIOHandler::Quality7图像的质量级别。支持此选项的处理程序在写入时预计会根据此选项的值(一个整数)设置图像质量级别。
QImageIOHandler::Name8图像的名称。支持此选项的处理程序预计会从图像元数据中读取名称,并将其作为QString返回,或者当写入图像时,预计会将名称存储在图像元数据中。
QImageIOHandler::SubType9图像的子类型。支持此选项的处理程序可以使用子类型值来帮助读取和写入图像。例如,PPM处理程序可能具有子类型值“ppm”或“ppmraw”。
QImageIOHandler::IncrementalReading10支持此选项的处理程序预计会以多个步骤读取图像,就像它是一个动画。QImageReader将图像视为动画。
QImageIOHandler::Endianness11图像的端序。某些图像格式可以作为大端或小端存储。支持端序的处理程序使用此选项的值来确定图像应该如何存储。
QImageIOHandler::Animation12支持动画的图像格式在supportsOption()中返回此值时为真,否则返回假。
QImageIOHandler::BackgroundColor13某些图像格式允许指定背景颜色。支持BackgroundColor的处理程序在读取图像时将背景颜色初始化为此选项(一个QColor)。
QImageIOHandler::ImageFormat14处理程序返回图像的数据格式。这可以是QImage::Format中列出的任何格式。
QImageIOHandler::SupportedSubTypes15支持不同保存变体的图像格式应在此选项中返回受支持的变体名称列表(QList("<QByteArray>"))。
QImageIOHandler::OptimizedWrite16支持此选项的处理程序预计会在写入时启用优化标志。
QImageIOHandler::ProgressiveScanWrite17支持此选项的处理程序预计会将图像作为一个渐进式扫描图像写入。
QImageIOHandler::ImageTransformation18支持此选项的处理程序可以读取图像的转换元数据。支持此选项的处理程序不应应用转换。

枚举 QImageIOHandler::Transformation
标志 QImageIOHandler::Transformations

此枚举描述了某些图像格式支持的不同转换或方向,通常通过EXIF。

常量描述
QImageIOHandler::TransformationNone0不应应用任何转换。
QImageIOHandler::TransformationMirror1水平镜像图像。
QImageIOHandler::TransformationFlip2垂直镜像图像。
QImageIOHandler::TransformationRotate180TransformationMirror | TransformationFlip将图像旋转180度。这与水平和垂直镜像相同。
QImageIOHandler::TransformationRotate904将图像旋转90度。
QImageIOHandler::TransformationMirrorAndRotate90组合变换 | TransformationRotate90先水平镜像图像,然后旋转90度。
QImageIOHandler::TransformationFlipAndRotate90变换翻转 | TransformationRotate90先垂直镜像图像,然后旋转90度。
QImageIOHandler::TransformationRotate270变换旋转180 | TransformationRotate90将图像旋转270度。这与水平和垂直镜像,然后再旋转90度相同。

Transformations类型是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,具有给定的sizeformat

此函数是在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

对于支持动画的图像格式,此函数返回动画中当前图像的序列号。如果在此函数调用之前任何图像尚未读取,则返回-1。序列中第一张图像的编号为0。

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

另请参阅 read

[virtual] QRect QImageIOHandler::currentImageRect() const

返回当前图像的矩形。如果没有为图像定义矩形,则返回空的QRect()。

此函数对于动画很有用,在动画中,每次可能只更新帧的一部分。

QIODevice *QImageIOHandler::device() const

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

另请参阅setDevice().

QByteArray QImageIOHandler::format() const

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

另请参阅setFormat().

[虚函数] int QImageIOHandler::imageCount() const

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

默认实现:如果 canRead() 返回 true,则返回 1;否则返回 0。

[虚函数] bool QImageIOHandler::jumpToImage(int imageNumber)

对于支持动画的图像格式,此函数跳转到具有序列号 imageNumber 的图像。下一次调用 read() 将尝试读取此图像。

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

[虚函数] bool QImageIOHandler::jumpToNextImage()

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

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

[虚函数] int QImageIOHandler::loopCount() const

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

[虚函数] int QImageIOHandler::nextImageDelay() const

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

[纯虚函数] QVariant QImageIOHandler::option(QImageIOHandler::ImageOption option) const

返回分配给 option 的值作为 QVariant。值的类型取决于选项。例如,选项(Size) 返回一个 QSize 变体。

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

[纯虚函数] 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().

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

使用值 value 设置选项 option

另请参阅 option() 和 ImageOption.

[虚拟] bool QImageIOHandler::supportsOption(QImageIOHandler::ImageOption option) const

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

另请参阅 setOption() 和 option.

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

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

默认实现什么都不做,直接返回 false

© 2024 The Qt Company Ltd. 本文档中包含的贡献是各自所有者的版权。本文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款提供的。Qt 和相应的徽标是芬兰以及/或其他国家的 The Qt Company Ltd. 的商标。所有其他商标均为各自所有者的财产。