Класс QImageWriter
Класс QImageWriter предоставляет формат-независимый интерфейс для записи изображений в файлы или другие устройства. Подробнее...
| Заголовок: | #include <QImageWriter> |
| qmake: | QT += gui |
Примечание: Все функции в этом классе являются повторно входящими.
Типы публичного доступа
| перечисление | ImageWriterError { DeviceError, UnsupportedFormatError, InvalidImageError, UnknownError } |
Функции публичного доступа
| QImageWriter(const QString &fileName, const QByteArray &format = QByteArray()) | |
| QImageWriter(QIODevice *device, const QByteArray &format) | |
| QImageWriter() | |
| ~QImageWriter() | |
| bool | canWrite() const |
| int | compression() const |
| QIODevice * | device() const |
| QImageWriter::ImageWriterError | error() const |
| QString | errorString() const |
| QString | fileName() const |
| QByteArray | format() const |
| float | gamma() 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 | setGamma(float gamma) |
| 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. Затем вы можете установить различные опции, такие как уровень гаммы (вызвав setGamma()) и качество (вызвав setQuality()). canWrite() возвращает true если QImageWriter может записать изображение (т.е., формат изображения поддерживается и устройство открыто для записи). Вызовите 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.
Документация по типам членов
перечисление QImageWriter::ImageWriterError
Это перечисление описывает ошибки, которые могут возникнуть при записи изображений с помощью QImageWriter.
| Константа | Значение | Описание |
|---|---|---|
QImageWriter::DeviceError |
1 |
QImageWriter столкнулся с ошибкой устройства при записи данных изображения. Обратитесь к вашему устройству для получения дополнительной информации о том, что пошло не так. |
QImageWriter::UnsupportedFormatError |
2 |
Qt не поддерживает требуемый формат изображения. |
QImageWriter::InvalidImageError |
3 |
Была предпринята попытка записать недопустимое QImage. Примером недопустимого изображения является null-QImage. |
QImageWriter::UnknownError |
0 |
Произошла неизвестная ошибка. Если вы получили это значение после вызова write(), это, скорее всего, вызвано ошибкой в QImageWriter. |
Документация по функциям членов
QImageWriter::QImageWriter(const QString &fileName, const QByteArray &format = QByteArray())
Создаёт объект QImageWriter, который будет записывать изображение в файл с именем fileName, используя формат изображения format. Если format не указан, QImageWriter определит формат изображения, анализируя расширение fileName.
QImageWriter::QImageWriter(QIODevice *device, const QByteArray &format)
Создаёт объект QImageWriter, используя устройство device и формат изображения format.
QImageWriter::QImageWriter()
Создаёт пустой объект QImageWriter. Перед записью необходимо вызвать setFormat() для установки формата изображения, а затем setDevice() или setFileName().
QImageWriter::~QImageWriter()
Удаляет объект QImageWriter.
bool QImageWriter::canWrite() const
Возвращает true, если QImageWriter может выполнить запись изображения; т. е., формат изображения поддерживается и назначенное устройство открыто для чтения.
См. также 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
Если текущее назначенное устройство — QFile, или если был вызван setFileName(), эта функция возвращает имя файла, в который записывает QImageWriter. В противном случае (т. е., если устройство не было назначено или устройство не является QFile) возвращается пустая строка QString.
См. также setFileName() и setDevice().
QByteArray QImageWriter::format() const
Возвращает формат, используемый QImageWriter для записи изображений.
См. также setFormat().
float QImageWriter::gamma() const
Возвращает значение гаммы изображения.
См. также setGamma().
[static] QList<QByteArray> QImageWriter::imageFormatsForMimeType(const QByteArray &mimeType)
Возвращает список форматов изображений, соответствующих mimeType.
Обратите внимание, что экземпляр QGuiApplication должен быть создан перед вызовом этой функции.
Эта функция была введена в Qt 5.12.
См. также supportedImageFormats() и supportedMimeTypes().
bool QImageWriter::optimizedWrite() const
Возвращает значение, указывающее, включена ли оптимизация для записи изображения.
Эта функция была введена в Qt 5.5.
См. также setOptimizedWrite().
bool QImageWriter::progressiveScanWrite() const
Возвращает значение, указывающее, должно ли изображение записываться как прогрессивное изображение.
Эта функция была введена в Qt 5.5.
См. также 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 попытается открыть устройство в режиме QIODevice::WriteOnly, вызвав open(). Обратите внимание, что это не работает для некоторых устройств, таких как 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::setGamma(float gamma)
Эта функция, специфичная для формата изображения, устанавливает уровень гаммы изображения на gamma. Для форматов изображений, которые не поддерживают установку уровня гаммы, это значение игнорируется.
Диапазон значений gamma зависит от формата изображения. Например, формат «png» поддерживает диапазон гаммы от 0,0 до 1,0.
См. также gamma() и quality().
void QImageWriter::setOptimizedWrite(bool optimize)
Эта функция, специфичная для формата изображения, устанавливает флаги optimize при записи изображений. Для форматов изображений, которые не поддерживают установку флага optimize, это значение игнорируется.
По умолчанию значение false.
Эта функция была введена в Qt 5.5.
См. также optimizedWrite().
void QImageWriter::setProgressiveScanWrite(bool progressive)
Эта функция, специфичная для формата изображения, включает прогрессивную развертку при записи изображений. Для форматов изображений, которые не поддерживают установку флага progressive сканирования, это значение игнорируется.
По умолчанию значение false.
Эта функция была введена в Qt 5.5.
См. также progressiveScanWrite().
void QImageWriter::setQuality(int quality)
Устанавливает значение качества формата изображения на quality.
Некоторые форматы изображений, особенно с потерей качества, требуют компромисса между: а) визуальным качеством результирующего изображения и б) временем выполнения кодирования и уровнем сжатия. Эта функция устанавливает уровень этого компромисса для форматов изображений, которые его поддерживают. Для других форматов это значение игнорируется.
Диапазон значений quality зависит от формата изображения. Например, формат «jpeg» поддерживает диапазон качества от 0 (низкое визуальное качество, высокое сжатие) до 100 (высокое визуальное качество, низкое сжатие).
См. также quality().
void QImageWriter::setSubType(const QByteArray &type)
Эта функция, специфичная для формата изображения, устанавливает подтип изображения на type. Подтип может использоваться обработчиком для определения формата, который следует использовать при сохранении изображения.
Например, сохранение изображения в формате DDS с типом A8R8G8R8:
QImageWriter writer("some/image.dds");
if (writer.supportsOption(QImageIOHandler::SubType))
writer.setSubType("A8R8G8B8");
writer.write(image); Эта функция была введена в Qt 5.4.
См. также 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); Если вы хотите сохранить один блок данных (например, комментарий), вы можете передать пустой ключ или использовать универсальный ключ, например, "Описание".
Ключ и текст будут встроены в данные изображения после вызова write().
Поддержка этого параметра реализована через QImageIOHandler::Description.
Эта функция была введена в Qt 4.1.
См. также QImage::setText() и QImageReader::text().
void QImageWriter::setTransformation(QImageIOHandler::Transformations transform)
Устанавливает метаданные преобразований изображения, включая ориентацию, на transform.
Если метаданные преобразований не поддерживаются форматом изображения, преобразование применяется до записи.
Эта функция была введена в Qt 5.5.
См. также transformation() и write().
QByteArray QImageWriter::subType() const
Возвращает подтип изображения.
Эта функция была введена в Qt 5.4.
См. также setSubType().
[static] 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 |
Чтение и запись SVG-файлов поддерживается модулем Qt SVG. Модуль Qt Image Formats предоставляет поддержку дополнительных форматов изображений.
Обратите внимание, что экземпляр QApplication должен быть создан до вызова этой функции.
См. также setFormat(), QImageReader::supportedImageFormats(), и QImageIOPlugin.
[static] QList<QByteArray> QImageWriter::supportedMimeTypes()
Возвращает список MIME-типов, поддерживаемых QImageWriter.
Обратите внимание, что экземпляр QApplication должен быть создан до вызова этой функции.
См. также supportedImageFormats() и QImageReader::supportedMimeTypes().
QList<QByteArray> QImageWriter::supportedSubTypes() const
Возвращает список подтипов, поддерживаемых изображением.
Эта функция была введена в Qt 5.4.
bool QImageWriter::supportsOption(QImageIOHandler::ImageOption option) const
Возвращает true если писатель поддерживает option; в противном случае возвращает false.
Разные форматы изображений поддерживают разные параметры. Вызовите эту функцию, чтобы определить, поддерживается ли определённый параметр текущим форматом. Например, формат PNG позволяет встраивать текст в метаданные изображения (см. text()).
QImageWriter writer(fileName);
if (writer.supportsOption(QImageIOHandler::Description))
writer.setText("Author", "John Smith"); Параметры можно проверить после того, как писатель был связан с форматом.
Эта функция была введена в Qt 4.2.
См. также QImageReader::supportsOption() и setFormat().
QImageIOHandler::Transformations QImageWriter::transformation() const
Возвращает преобразование и ориентацию, к которым было установлено изображение для записи.
Эта функция была введена в Qt 5.5.
См. также setTransformation().
bool QImageWriter::write(const QImage &image)
Записывает изображение image в назначенное устройство или имя файла. Возвращает true при успехе; в противном случае возвращает false. Если операция завершается неудачей, вы можете вызвать error() для определения типа произошедшей ошибки или errorString() для получения удобочитаемого описания ошибки.
См. также canWrite(), error(), и errorString().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qimagewriter.html