QImageWriter 类

QImageWriter 类提供了一个通用的接口,用于将图像写入文件或其他设备。 更多...

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

注意: 这个类中所有函数都是可重入的

公共类型

枚举ImageWriterError { DeviceError, UnsupportedFormatError, InvalidImageError, UnknownError }

公共函数

QImageWriter()
QImageWriter(QIODevice *device, const QByteArray &format)
QImageWriter(const QString &fileName, const QByteArray &format = QByteArray())
~QImageWriter()
boolcanWrite() const
intcompression() const
QIODevice *device() const
QImageWriter::ImageWriterErrorerror() const
QStringerrorString() const
QStringfileName() const
QByteArrayformat() const
booloptimizedWrite() const
boolprogressiveScanWrite() const
intquality() const
voidsetCompression(int compression)
voidsetDevice(QIODevice *device)
voidsetFileName(const QString &fileName)
voidsetFormat(const QByteArray &format)
voidsetOptimizedWrite(bool optimize)
voidsetProgressiveScanWrite(bool progressive)
voidsetQuality(int quality)
voidsetSubType(const QByteArray &type)
voidsetText(const QString &key, const QString &text)
voidsetTransformation(QImageIOHandler::Transformations transform)
QByteArraysubType() const
QList<QByteArray>supportedSubTypes() const
boolsupportsOption(QImageIOHandler::ImageOption option) const
QImageIOHandler::Transformationstransformation() const
boolwrite(const QImage &image)

静态公共成员

QList<QByteArray>imageFormatsForMimeType(const QByteArray &mimeType)
QList<QByteArray>支持的图像格式()
QList<QByteArray>支持的MIME类型()

详细描述

QImageWriter支持在存储图像前设置特定格式的选项,例如压缩级别和质量。如果您不需要这些选项,则可以使用QImage::save() 或 QPixmap::save()。

要存储图像,您首先创建一个QImageWriter对象。将文件名或设备指针及其图像格式传递给QImageWriter的构造函数。然后您可以设置多个选项,例如质量(通过调用setQuality())。如果QImageWriter可以写入图像(即图像格式受支持且设备已打开以便写入),则canWrite()返回true。通过调用write()将图像写入设备。

如果在写入图像时发生任何错误,则write()将返回false。然后您可以调用error()以查找发生的错误类型,或调用errorString()以获取关于错误的易读描述。

调用supportedImageFormats()以获取QImageWriter可以写入的格式列表。除了任何支持写入的图像格式插件外,QImageWriter支持所有内置图像格式。

注意: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"));

另请参阅:QImageReaderQImageIOHandlerQImageIOPluginQColorSpace

成员类型文档

enum QImageWriter::ImageWriterError

此枚举描述了使用QImageWriter写入图像时可能发生的错误。

常量描述
QImageWriter::DeviceError1QImageWriter在写入图像数据时遇到了设备错误。请咨询设备以了解更多有关错误的信息。
QImageWriter::UnsupportedFormatError2Qt不支持请求的图像格式。
QImageWriter::InvalidImageError3尝试写入无效的QImage。无效图像的示例包括为null的QImage
QImageWriter::UnknownError0发生了未知错误。如果您在调用write()之后获得此值,则很可能是由QImageWriter中的错误引起的。

成员函数文档

QImageWriter::QImageWriter()

构建一个空的QImageWriter对象。在写入之前,您必须调用setFormat()来设置图像格式,然后调用setDevice()或setFileName()。

[显式] QImageWriter::QImageWriter(QIODevice *device, const QByteArray &format)

使用设备device和图像格式format构建一个QImageWriter对象。

[显式] QImageWriter::QImageWriter(const QString &fileName, const QByteArray &format = QByteArray())

构建了一个QImageWriter对象,用于将图像写入名为fileName的文件,使用图像格式format。如果未提供format,QImageWriter将通过检查fileName的扩展名来自动检测图像格式。

[noexcept] QImageWriter::~QImageWriter()

销毁QImageWriter对象。

bool QImageWriter::canWrite() const

如果QImageWriter可以编写图像,则返回true; 即图像格式受支持并且分配的设备可用于读取。

另请参阅write(),setDevice()和setFormat()。

int QImageWriter::compression() const

返回图像的压缩率。

另请参阅setCompression()。

QIODevice *QImageWriter::device() const

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

另请参阅setDevice()。

QImageWriter::ImageWriterError QImageWriter::error() const

返回最后发生的错误类型。

另请参阅ImageWriterErrorerrorString()。

QString QImageWriter::errorString() const

返回最后发生的错误的可读描述。

另请参阅error()。

QString QImageWriter::fileName() const

如果当前分配的设备是文件,或者如果调用了setFileName(),则此函数返回QImageWriter写入的文件名。否则(即,如果没有分配设备或设备不是文件),返回一个空的QString

另请参阅setFileName()和setDevice()。

QByteArray QImageWriter::format() const

返回QImageWriter用于写入图像的格式。

另请参阅setFormat()。

[静态] QList<QByteArray> QImageWriter::imageFormatsForMimeType(const QByteArray &mimeType)

返回与 mimeType 相关的图像格式列表。

注意,在调用此函数之前必须创建 QGuiApplication 实例。

另请参阅 supportedImageFormats() 和 supportedMimeTypes()。

bool QImageWriter::optimizedWrite() const

返回是否已开启图像写入的优化。

另请参阅 setOptimizedWrite()。

bool QImageWriter::progressiveScanWrite() const

返回图像是否应以渐进式图像的形式写入。

另请参阅 setProgressiveScanWrite()。

int QImageWriter::quality() const

返回图像格式的质量设置。

另请参阅 setQuality()。

void QImageWriter::setCompression(int compression)

这是一个特定于图像格式的函数,用于设置图像的压缩。对于不支持设置压缩的图像格式,此值将被忽略。

compression 的值范围取决于图像格式。例如,“tiff”格式支持两种值,0(不压缩)和 1(LZW 压缩)。

另请参阅 compression()。

void QImageWriter::setDevice(QIODevice *device)

设置 QImageWriter 的设备为 device。如果已设置设备,则从 QImageWriter 中移除旧设备,否则保持不变。

如果设备尚未打开,QImageWriter 将通过调用 open() 尝试以 QIODevice::WriteOnly 模式打开设备。请注意,这对于某些设备不起作用,例如 QProcessQTcpSocketQUdpSocket,其中需要更多的逻辑来打开设备。

另请参阅 device() 和 setFileName()。

void QImageWriter::setFileName(const QString &fileName)

设置 QImageWriter 的文件名为 fileName。内部,QImageWriter 将创建一个 QFile 并以 QIODevice::WriteOnly 模式打开它,并在写入图像时使用此文件。

另请参阅 fileName() 和 setDevice()。

void QImageWriter::setFormat(const QByteArray &format)

设置 QImageWriter 在写入图像时使用的格式为 formatformat 是不区分大小写的文本字符串。例如

QImageWriter writer;
writer.setFormat("png"); // same as writer.setFormat("PNG");

您可以调用 supportedImageFormats() 以获取 QImageWriter 支持的格式完整列表。

另请参阅 format()。

void QImageWriter::setOptimizedWrite(bool optimize)

这是一个特定于图像格式的函数,在写入图像时设置优化标志。对于不支持设置优化标志的图像格式,此值会被忽略。

默认为false。

参阅optimizedWrite()。

void QImageWriter::setProgressiveScanWrite(bool progressive)

这是一个特定于图像格式的函数,在写入图像时启用渐进式扫描。对于不支持设置渐进式扫描标志的图像格式,此值会被忽略。

默认为false。

参阅progressiveScanWrite()。

void QImageWriter::setQuality(int quality)

设置图像格式的质量为质量

一些图像格式,特别是有损格式,需要在a)最终图像的视觉质量,和b)编码执行时间和压缩级别之间做出权衡。本函数为此问题设置了论及的水平,对于支持此功能的图像格式。对于其他格式,此值会被忽略。

质量的有效值范围取决于图像格式。例如,“jpeg”格式支持从0(低视觉质量,高压缩)到100(高视觉质量,低压缩)的范围。

参阅quality()。

void QImageWriter::setSubType(const QByteArray &type)

这是一个特定于图像格式的函数,将图像的子类型设为类型。子类型可以被用于在保存图像时确定使用哪种格式。

例如,在将具有A8R8G8R8子类型的图像保存为DDS格式时

QImageWriter writer("some/image.dds");
if (writer.supportsOption(QImageIOHandler::SubType))
    writer.setSubType("A8R8G8B8");
writer.write(image);

参阅subType()。

void QImageWriter::setText(const QString &key, const QString &text)

将与关键字相关联的图像文本设为文本。这对于存储版权信息或其他与图像相关的信息非常有用。示例

QImage image("some/image.jpeg");
QImageWriter writer("images/outimage.png", "png");
writer.setText("Author", "John Smith");
writer.write(image);

如果你想要存储一个数据块(例如,一条注释),你可以传递一个空键,或者使用如“描述”这样的通用键。

在调用write()后,键和文本会被嵌入到图像数据中。

对此选项的支持是通过QImageIOHandler::Description实现的。

参阅QImage::setProperty()和QImageReader::text()。

void QImageWriter::setTransformation(QImageIOHandler::Transformations transform)

设置图像变换元数据,包括方向为变换

如果图像格式不支持变换元数据,变换将在写入前应用。

参阅transformation()和write()。

QByteArray QImageWriter::subType() const

返回图像的子类型。

参阅setSubType()。

[静态] QList<QByteArray> QImageWriter::supportedImageFormats()

返回由QImageWriter支持的图像格式列表。

默认情况下,Qt可以写入以下格式

格式MIME类型描述
BMPimage/bmpWindows位图
JPGimage/jpeg联合摄影专家组
PNGimage/png可移植网络图形
PBMimage/x-portable-bitmap可移植位图
PGMimage/x-portable-graymap可移植灰度图
PPMimage/x-portable-pixmap可移植光栅图
XBmimage/x-xbitmapX11位图
XPMimage/x-xpixmapX11光栅图

通过Qt SVG模块支持读取和写入SVG文件。Qt图像格式Qt Image Formats模块提供了对其他图像格式的支持。

请注意,在此函数调用之前必须创建QApplication实例。

另请参阅setFormat()、QImageReader::supportedImageFormats()以及QImageIOPlugin

[静态] QList<QByteArray> QImageWriter::supportedMimeTypes()

返回由QImageWriter支持的MIME类型列表。

请注意,在此函数调用之前必须创建QApplication实例。

另请参阅supportedImageFormats()和QImageReader::supportedMimeTypes

QList<QByteArray> QImageWriter::supportedSubTypes() const

返回图像支持的子类型列表。

bool QImageWriter::supportsOption(QImageIOHandler::ImageOption option) const

如果写入器支持option则返回true;否则返回false。

不同的图像格式支持不同的选项。调用此函数以确定当前格式是否支持某些选项。例如,PNG格式允许将文本嵌入图像的元数据中(请参阅text())。

QImageWriter writer(fileName);
if (writer.supportsOption(QImageIOHandler::Description))
    writer.setText("Author", "John Smith");

在将写入器关联到格式后可以测试选项。

另请参阅QImageReader::supportsOption()和setFormat

QImageIOHandler::Transformations QImageWriter::transformation() const

返回图像设置为写入时要执行的转换和方向。

另请参阅setTransformation

bool QImageWriter::write(const QImage &image)

将图像image写入指定的设备或文件名。如果成功则返回true;否则返回false。如果操作失败,可以调用error()来找到发生错误类型,或调用errorString()来获取错误的人类可读描述。

另请参阅canWrite()、error()和errorString

© 2024 The Qt Company Ltd。本文件中包含的文档贡献归各自所有者拥有版权。所提供文档的授权根据免费软件基金会发布的《GNU自由文档许可证》第1.3版进行,许可证网址为http://www.gnu.org/licenses/fdl.html。Qt及其相关标志为芬兰的The Qt Company Ltd.及/或世界其他国家的商标。所有其他商标均为其各自所有者的财产。