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 写入图像时可能发生的错误。
1、bool canWrite()
是否可以写入图像,即支持图像格式并且分配的设备已打开可供读取。
2、QImageWriter::ImageWriterError error()
返回上次发生的错误类型。
3、QString errorString()
返回发生的最后一个错误的描述。
4、【static】QList
返回与 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
返回支持的图像格式列表。必须在调用此函数之前创建 QApplication 实例。
默认情况下,可以写入以下格式:
15、【static】QList
返回支持的 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() 来获取错误描述。