QImageWriter Class
QImageWriter 类提供了一个与格式无关的接口,用于将图像写入文件或其他设备。更多
头文件: | #include <QImageWriter> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
- 所有成员(包括继承成员)的列表
- QImageWriter 属于绘画类。
注意:该类中的所有函数都是可重入的。
公共类型
enum | ImageWriterError { DeviceError, UnsupportedFormatError, InvalidImageError, UnknownError } |
公共函数
QImageWriter() | |
QImageWriter(QIODevice *device, const QByteArray &format) | |
QImageWriter(const QString &fileName, const QByteArray &format = QByteArray()) | |
~QImageWriter() | |
bool | canWrite() const |
int | compression() const |
QIODevice * | device() const |
QImageWriter::ImageWriterError | error() const |
QString | errorString() const |
QString | fileName() const |
QByteArray | format() const |
bool | optimizedWrite() const |
bool | progressiveScanWrite() const |
int | quality() const |
void | setCompression(int compression) |
void | setDevice(QIODevice *device) |
void | setFileName(const QString &fileName) |
void | setFormat(const QByteArray &format) |
void | setOptimizedWrite(bool optimize) |
void | setProgressiveScanWrite(bool progressive) |
void | setQuality(int quality) |
void | setSubType(const QByteArray &type) |
void | setText(const QString &key, const QString &text) |
void | setTransformation(QImageIOHandler::Transformations transform) |
QByteArray | subType() const |
QList<QByteArray> | supportedSubTypes() const |
bool | supportsOption(QImageIOHandler::ImageOption option) const |
QImageIOHandler::Transformations | transformation() const |
bool | write(const QImage &image) |
静态公共成员
QList<QByteArray> | imageFormatsForMimeType(const QByteArray &mimeType) |
QList<QByteArray> | supportedImageFormats() |
QList<QByteArray> | supportedMimeTypes() |
详细说明
QImageWriter 支持在存储图像前设置特定格式选项,如压缩级别和质量。如果不需要这些选项,可以使用QImage::save() 或QPixmap::save() 代替。
要存储图像,首先要构建一个 QImageWriter 对象。将文件名或设备指针以及图像格式传递给 QImageWriter 的构造函数。然后,您可以设置多个选项,如质量(通过调用setQuality()).canWrite(如果 QImageWriter 可以写入图像(即支持图像格式且设备已打开供写入),则 () 返回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"));
另请参阅 QImageReader,QImageIOHandler,QImageIOPlugin, 和QColorSpace 。
成员类型文档
enum QImageWriter::ImageWriterError
该枚举描述了使用QImageWriter 写入图像时可能发生的错误。
常量 | 值 | 说明 |
---|---|---|
QImageWriter::DeviceError | 1 | QImageWriter 写入图像数据时遇到设备错误。有关出错原因的详细信息,请咨询您的设备。 |
QImageWriter::UnsupportedFormatError | 2 | Qt 不支持请求的图像格式。 |
QImageWriter::InvalidImageError | 3 | 试图写入无效的QImage 。无效图像的例子是空QImage 。 |
QImageWriter::UnknownError | 0 | 出现未知错误。如果在调用write() 后得到此值,则很可能是QImageWriter 中的错误造成的。 |
成员函数文档
QImageWriter::QImageWriter()
构造一个空的 QImageWriter 对象。在写入之前,必须调用setFormat() 来设置图像格式,然后调用setDevice() 或setFileName() 。
[explicit]
QImageWriter::QImageWriter(QIODevice *device, const QByteArray &format)
使用设备device 和图像格式format 构建 QImageWriter 对象。
[explicit]
QImageWriter::QImageWriter(const QString &fileName, const QByteArray &format = QByteArray())
构造一个 QImageWriter 对象,该对象将使用图像格式format 写入名称为fileName 的文件。如果没有提供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
返回上次发生的错误类型。
另请参阅 ImageWriterError 和errorString()。
QString QImageWriter::errorString() const
返回对上次发生的错误的可读描述。
另请参见 error()。
QString QImageWriter::fileName() const
如果当前分配的设备是一个文件,或者如果setFileName() 已被调用,该函数将返回QImageWriter 写入的文件名。否则(即未分配设备或设备不是文件),将返回空QString 。
另请参阅 setFileName() 和setDevice()。
QByteArray QImageWriter::format() const
返回QImageWriter 用来写入图像的格式。
另请参阅 setFormat()。
[static]
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() 试图以QIODeviceBase::WriteOnly 模式打开设备。请注意,这不适用于某些设备,如QProcess 、QTcpSocket 和QUdpSocket ,在这些设备中,打开设备需要更多逻辑。
另请参阅 device() 和setFileName()。
void QImageWriter::setFileName(const QString &fileName)
将QImageWriter 的文件名设置为fileName 。在内部,QImageWriter 将创建一个QFile 并以QIODevice::WriteOnly 模式打开,并在写入图像时使用该文件。
void QImageWriter::setFormat(const QByteArray &format)
将QImageWriter 写入图像时使用的格式设置为format 。format 是一个不区分大小写的文本字符串。举例说明:
QImageWriter writer; writer.setFormat("png"); // same as writer.setFormat("PNG");
您可以调用supportedImageFormats() 查看QImageWriter 支持的全部格式列表。
另请参阅 format()。
void QImageWriter::setOptimizedWrite(bool optimize)
这是一个特定于图像格式的函数,用于在写入图像时设置optimize 标志。对于不支持设置optimize 标志的图像格式,该值将被忽略。
默认值为 false。
另请参见 optimizedWrite()。
void QImageWriter::setProgressiveScanWrite(bool progressive)
这是一个特定于图像格式的函数,用于在写入图像时打开progressive 扫描。对于不支持设置progressive 扫描标志的图像格式,该值将被忽略。
默认值为 false。
另请参阅 progressiveScanWrite()。
void QImageWriter::setQuality(int quality)
将图像格式的质量设置设为quality 。
某些图像格式,尤其是有损图像格式,需要在 a) 生成图像的视觉质量与 b) 编码执行时间和压缩级别之间进行权衡。此函数为支持折衷的图像格式设置折衷级别。对于其他格式,该值将被忽略。
quality 的取值范围取决于图像格式。例如,"jpeg "格式支持的质量范围从 0(低视觉质量,高压缩)到 100(高视觉质量,低压缩)。
另请参阅 quality() 。
void QImageWriter::setSubType(const QByteArray &type)
这是一个图像格式特定函数,用于将图像的子类型设置为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)
将与密钥key 相关联的图像文本设置为text 。这对于存储版权信息或有关图像的其他信息非常有用。举例说明:
QImage image("some/image.jpeg"); QImageWriter writer("images/outimage.png", "png"); writer.setText("Author", "John Smith"); writer.write(image);
如果要存储单个数据块(如注释),可以传递一个空键,或使用 "Description"(描述)这样的通用键。
调用write() 后,键和文本将嵌入图像数据中。
对该选项的支持通过QImageIOHandler::Description 实现。
另请参见 QImage::setText() 和QImageReader::text()。
void QImageWriter::setTransformation(QImageIOHandler::Transformations transform)
将图像变换元数据(包括方向)设置为transform 。
如果图像格式不支持变换元数据,则会在写入前应用变换。
另请参阅 transformation() 和write()。
QByteArray QImageWriter::subType() const
返回图像的子类型。
另请参阅 setSubType()。
[static]
QList<QByteArray> QImageWriter::supportedImageFormats()
返回QImageWriter 支持的图像格式列表。
默认情况下,Qt 可以写入以下格式:
格式 | MIME 类型 | 描述 |
---|---|---|
BMP | 图像/bmp | Windows 位图 |
JPG | 图像/jpeg | 联合图像专家组 |
PNG | 图像/png | 便携式网络图形 |
PBM | 图像/x-便携式位图 | 便携式位图 |
PGM | 图像/x-便携式灰度图 | 便携式灰度图 |
PPM | 图像/x-便携式像素图 | 便携式像素图 |
XBM | 图像/x-xbitmap | X11 位图 |
XPM | 图像/x-xpixmap | X11 像素图 |
模块支持读写 SVG 文件。 Qt SVG模块支持读写 SVG 文件。该 Qt Image Formats模块提供对其他图像格式的支持。
请注意,必须在调用此函数前创建QApplication 实例。
另请参阅 setFormat(),QImageReader::supportedImageFormats() 和QImageIOPlugin 。
[static]
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()。
© 2025 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.