QImageWriter 类
QImageWriter 类提供了一个通用的接口,用于将图像写入文件或其他设备。 更多...
头文件 | #include <QImageWriter> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
- 全部成员列表,包括继承的成员
- QImageWriter 是 绘图类 的一部分。
注意: 这个类中所有函数都是可重入的。
公共类型
枚举 | 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> | 支持的图像格式() |
QList<QByteArray> | 支持的MIME类型() |
详细描述
QImageWriter支持在存储图像前设置特定格式的选项,例如压缩级别和质量。如果您不需要这些选项,则可以使用QImage::save() 或 QPixmap::save()。
要存储图像,您首先创建一个QImageWriter对象。将文件名或设备指针及其图像格式传递给QImageWriter的构造函数。然后您可以设置多个选项,例如质量(通过调用setQuality())。如果QImageWriter可以写入图像(即图像格式受支持且设备已打开以便写入),则canWrite()返回true
。通过调用write()将图像写入设备。
如果在写入图像时发生任何错误,则
调用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。无效图像的示例包括为null的QImage。 |
QImageWriter::UnknownError | 0 | 发生了未知错误。如果您在调用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
返回最后发生的错误类型。
另请参阅ImageWriterError和errorString()。
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 模式打开设备。请注意,这对于某些设备不起作用,例如 QProcess、QTcpSocket 和 QUdpSocket,其中需要更多的逻辑来打开设备。
另请参阅 device() 和 setFileName()。
void QImageWriter::setFileName(const QString &fileName)
设置 QImageWriter 的文件名为 fileName。内部,QImageWriter 将创建一个 QFile 并以 QIODevice::WriteOnly 模式打开它,并在写入图像时使用此文件。
另请参阅 fileName() 和 setDevice()。
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)
这是一个特定于图像格式的函数,在写入图像时设置优化标志。对于不支持设置优化标志的图像格式,此值会被忽略。
默认为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类型 | 描述 |
---|---|---|
BMP | image/bmp | Windows位图 |
JPG | image/jpeg | 联合摄影专家组 |
PNG | image/png | 可移植网络图形 |
PBM | image/x-portable-bitmap | 可移植位图 |
PGM | image/x-portable-graymap | 可移植灰度图 |
PPM | image/x-portable-pixmap | 可移植光栅图 |
XBm | image/x-xbitmap | X11位图 |
XPM | image/x-xpixmap | X11光栅图 |
通过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.及/或世界其他国家的商标。所有其他商标均为其各自所有者的财产。