Класс QImageIOHandler
Класс QImageIOHandler определяет общий интерфейс ввода-вывода изображений для всех форматов изображений в Qt. Подробнее...
| Заголовок: | #include <QImageIOHandler> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
Примечание: Все функции в этом классе являются повторно входящими.
Типы публичного доступа
| перечисление | ImageOption { Size, ClipRect, ScaledSize, ScaledClipRect, Description, …, ImageTransformation } |
| перечисление | Transformation { TransformationNone, TransformationMirror, TransformationFlip, TransformationRotate180, TransformationRotate90, …, TransformationRotate270 } |
| флаги | Transformations |
Функции публичного доступа
| QImageIOHandler() | |
| виртуальный | ~QImageIOHandler() |
| виртуальный bool | canRead() const = 0 |
| виртуальный int | currentImageNumber() const |
| виртуальный QRect | currentImageRect() const |
| QIODevice * | device() const |
| QByteArray | format() const |
| виртуальный int | imageCount() const |
| виртуальный bool | jumpToImage(int imageNumber) |
| виртуальный bool | jumpToNextImage() |
| виртуальный int | loopCount() const |
| виртуальный int | nextImageDelay() const |
| виртуальный QVariant | option(QImageIOHandler::ImageOption option) const |
| виртуальный bool | read(QImage *image) = 0 |
| void | setDevice(QIODevice *device) |
| void | setFormat(const QByteArray &format) |
| void | setFormat(const QByteArray &format) const |
| виртуальный void | setOption(QImageIOHandler::ImageOption option, const QVariant &value) |
| виртуальный bool | supportsOption(QImageIOHandler::ImageOption option) const |
| виртуальный bool | write(const QImage &image) |
Статические члены публичного доступа
| bool | allocateImage(QSize size, QImage::Format format, QImage *image) |
Подробное описание
Qt использует QImageIOHandler для чтения и записи изображений через QImageReader и QImageWriter. Вы также можете наследовать от этого класса, чтобы написать свой собственный обработчик форматов изображений, используя механизм плагинов Qt.
Вызовите setDevice(), чтобы назначить устройство обработчику, и setFormat(), чтобы назначить ему формат. Один QImageIOHandler может поддерживать более одного формата изображения. canRead() возвращает true , если изображение может быть прочитано из устройства, а read() и write() возвращают true, если чтение или запись изображения завершились успешно.
QImageIOHandler также поддерживает форматы анимаций через функции loopCount(), imageCount(), nextImageDelay() и currentImageNumber().
Для определения поддерживаемых обработчиком изображений параметров Qt вызовет supportsOption() и setOption(). Убедитесь, что переопределили эти функции, если вы можете предоставить поддержку для любого из параметров в перечислении ImageOption.
Чтобы написать свой собственный обработчик изображений, вам необходимо как минимум переопределить canRead() и read(). Затем создайте QImageIOPlugin, который может создать обработчик. Наконец, установите свой плагин, и QImageReader и QImageWriter автоматически загрузят плагин и начнут его использовать.
См. также QImageIOPlugin, QImageReader и QImageWriter.
Документация по типам членов
перечисление QImageIOHandler::ImageOption
Это перечисление описывает различные параметры, поддерживаемые QImageIOHandler. Некоторые параметры используются для запроса свойств изображения, а другие — для переключения способа записи изображения.
| Константа | Значение | Описание |
|---|---|---|
QImageIOHandler::Size |
0 |
Исходный размер изображения. Обработчик, поддерживающий этот параметр, должен считать размер изображения из метаданных изображения и вернуть этот размер из option() в виде QSize. |
QImageIOHandler::ClipRect |
1 |
Прямоугольник обрезки или ROI (Region Of Interest). Обработчик, поддерживающий этот параметр, должен считать только предоставленную область QRect из исходного изображения в read() перед применением любых других преобразований. |
QImageIOHandler::ScaledSize |
4 |
Масштабированный размер изображения. Обработчик, поддерживающий этот параметр, должен масштабировать изображение до заданного размера (a QSize) после применения любого преобразования обрезки (ClipRect). Если обработчик не поддерживает этот параметр, QImageReader выполнит масштабирование после чтения изображения. |
QImageIOHandler::ScaledClipRect |
3 |
Масштабированный прямоугольник обрезки (или ROI, Region Of Interest) изображения. Обработчик, поддерживающий этот параметр, должен применить заданный прямоугольник обрезки (a QRect) после применения любого масштабирования (ScaleSize) или обычной обрезки (ClipRect). Если обработчик не поддерживает этот параметр, QImageReader применит масштабированный прямоугольник обрезки после чтения изображения. |
QImageIOHandler::Description |
2 |
Описание изображения. Некоторые форматы изображений, такие как GIF и PNG, позволяют встраивать текст или комментарии в данные изображения (например, для хранения информации об авторских правах). Обычно текст хранится в виде пар ключ-значение, но некоторые форматы хранят весь текст в одном непрерывном блоке. QImageIOHandler возвращает текст как одну QString, где ключи и значения разделены двоеточием, а пары ключ-значение разделены двумя новыми строками (\n\n). Например, "Title: Sunset\n\nAuthor: Jim Smith\nSarah Jones\n\n". Форматы, которые хранят текст в одном блоке, могут использовать "Description" в качестве ключа. |
QImageIOHandler::CompressionRatio |
5 |
Коэффициент сжатия данных изображения. Обработчик, поддерживающий этот параметр, должен установить коэффициент сжатия в зависимости от значения этого параметра (целое число) при записи. |
QImageIOHandler::Gamma |
6 |
Уровень гаммы изображения. Обработчик, поддерживающий этот параметр, должен установить уровень гаммы изображения в зависимости от значения этого параметра (вещественное число) при записи. |
QImageIOHandler::Quality |
7 |
Уровень качества изображения. Обработчик, поддерживающий этот параметр, должен установить уровень качества изображения в зависимости от значения этого параметра (целое число) при записи. |
QImageIOHandler::Name |
8 |
Название изображения. Обработчик, поддерживающий этот параметр, должен считать имя из метаданных изображения и вернуть его в виде QString, или при записи изображения должен сохранить имя в метаданных изображения. |
QImageIOHandler::SubType |
9 |
Подтип изображения. Обработчик, поддерживающий этот параметр, может использовать значение подтипа при чтении и записи изображений. Например, обработчик PPM может иметь значение подтипа "ppm" или "ppmraw". |
QImageIOHandler::IncrementalReading |
10 |
Обработчик, поддерживающий этот параметр, должен считывать изображение в несколько проходов, как если бы это была анимация. QImageReader будет рассматривать изображение как анимацию. |
QImageIOHandler::Endianness |
11 |
Порядок байтов изображения. Некоторые форматы изображений могут храниться как BigEndian или LittleEndian. Обработчик, поддерживающий порядок байтов, использует значение этого параметра, чтобы определить, как должно храниться изображение. |
QImageIOHandler::Animation |
12 |
Форматы изображений, поддерживающие анимацию, возвращают значение true для этого параметра в supportsOption(); в противном случае возвращается false. |
QImageIOHandler::BackgroundColor |
13 |
Определённые форматы изображений позволяют указать цвет фона. Обработчик, поддерживающий BackgroundColor, инициализирует цвет фона этим параметром (a QColor) при чтении изображения. |
QImageIOHandler::ImageFormat |
14 |
Формат данных изображения, возвращаемый обработчиком. Это может быть любой из форматов, перечисленных в QImage::Format. |
QImageIOHandler::SupportedSubTypes |
15 |
Форматы изображений, поддерживающие различные варианты сохранения, должны возвращать список поддерживаемых имён вариантов (QList<QByteArray>) в этом параметре. |
QImageIOHandler::OptimizedWrite |
16 |
Обработчик, поддерживающий этот параметр, должен включить флаги оптимизации при записи. |
QImageIOHandler::ProgressiveScanWrite |
17 |
Обработчик, поддерживающий этот параметр, должен записать изображение как изображение с прогрессивной разверткой. |
QImageIOHandler::ImageTransformation |
18 |
Обработчик, поддерживающий этот параметр, может считывать метаданные преобразования изображения. Обработчик, поддерживающий этот параметр, не должен применять само преобразование. |
[since 5.5] перечисление QImageIOHandler::Transformationфлаги QImageIOHandler::Transformations
Это перечисление описывает различные преобразования или ориентации, поддерживаемые некоторыми форматами изображений, обычно через EXIF.
| Константа | Значение | Описание |
|---|---|---|
QImageIOHandler::TransformationNone |
0 |
Преобразование не должно применяться. |
QImageIOHandler::TransformationMirror |
1 |
Отразить изображение по горизонтали. |
QImageIOHandler::TransformationFlip |
2 |
Отразить изображение по вертикали. |
QImageIOHandler::TransformationRotate180 |
TransformationMirror | TransformationFlip |
Повернуть изображение на 180 градусов. Это то же самое, что отразить его по горизонтали и вертикали. |
QImageIOHandler::TransformationRotate90 |
4 |
Повернуть изображение на 90 градусов. |
QImageIOHandler::TransformationMirrorAndRotate90 |
TransformationMirror | TransformationRotate90 |
Отразить изображение по горизонтали, а затем повернуть его на 90 градусов. |
QImageIOHandler::TransformationFlipAndRotate90 |
TransformationFlip | TransformationRotate90 |
Отразить изображение по вертикали, а затем повернуть его на 90 градусов. |
QImageIOHandler::TransformationRotate270 |
TransformationRotate180 | TransformationRotate90 |
Повернуть изображение на 270 градусов. Это то же самое, что отразить его по горизонтали, вертикали и затем повернуть на 90 градусов. |
Это перечисление было введено или изменено в Qt 5.5.
Тип Transformations является псевдонимом для QFlags<Transformation>. Он хранит логическое ИЛИ сочетание значений Transformation.
См. также QImageReader::transformation(), QImageReader::setAutoTransform(), и QImageWriter::setTransformation().
Документация по функциям-членам
QImageIOHandler::QImageIOHandler()
Конструирует объект QImageIOHandler.
[virtual] QImageIOHandler::~QImageIOHandler()
Деструирует объект QImageIOHandler.
[static, since 6.0] bool QImageIOHandler::allocateImage(QSize size, QImage::Format format, QImage *image)
Это удобный метод для функции чтения в подклассах. Обработчики форматов изображений должны отклонять загрузку изображения, если требуемая выделение превысит текущий предел выделения. Эта функция проверяет параметры и предел, и выполняет выделение, если оно допустимо и необходимо. После успешного возврата, image будет допустимым, отсоединённым QImage заданного размера size и формата format.
Эта функция была введена в Qt 6.0.
См. также QImageReader::allocationLimit().
[pure virtual] bool QImageIOHandler::canRead() const
Возвращает true если изображение может быть считано с устройства (то есть формат изображения поддерживается, устройство может быть считано и начальная информация заголовка предполагает, что изображение может быть считано); в противном случае возвращает false.
При переопределении canRead() убедитесь, что устройство ввода-вывода (device()) оставлено в исходном состоянии (например, с помощью peek(), а не read()).
См. также read() и QIODevice::peek().
[virtual] int QImageIOHandler::currentImageNumber() const
Для форматов изображений, поддерживающих анимацию, эта функция возвращает номер последовательности текущего изображения в анимации. Если эта функция вызывается до чтения любого изображения read(), возвращается -1. Номер первого изображения в последовательности — 0.
Если формат изображения не поддерживает анимацию, возвращается 0.
См. также read().
[virtual] QRect QImageIOHandler::currentImageRect() const
Возвращает прямоугольник текущего изображения. Если для изображения не определён прямоугольник, возвращается пустой прямоугольник QRect().
Эта функция полезна для анимаций, где могут обновляться только части кадра за раз.
QIODevice *QImageIOHandler::device() const
Возвращает устройство, в настоящее время назначенное обработчику изображений QImageIOHandler. Если устройство не назначено, возвращается nullptr.
См. также setDevice().
QByteArray QImageIOHandler::format() const
Возвращает формат, в настоящее время назначенный QImageIOHandler. Если формат не назначен, возвращается пустая строка.
См. также setFormat().
[virtual] int QImageIOHandler::imageCount() const
Для форматов изображений, поддерживающих анимацию, эта функция возвращает количество изображений в анимации. Если формат изображения не поддерживает анимацию или не может определить количество изображений, возвращается 0.
Реализация по умолчанию возвращает 1, если canRead() возвращает true; в противном случае возвращается 0.
[virtual] bool QImageIOHandler::jumpToImage(int imageNumber)
Для форматов изображений, поддерживающих анимацию, эта функция переходит к изображению с номером последовательности imageNumber. Следующий вызов read() попытается прочитать это изображение.
Реализация по умолчанию ничего не делает и возвращает false.
[virtual] bool QImageIOHandler::jumpToNextImage()
Для форматов изображений, поддерживающих анимацию, эта функция переходит к следующему изображению.
Реализация по умолчанию ничего не делает и возвращает false.
[virtual] int QImageIOHandler::loopCount() const
Для форматов изображений, поддерживающих анимацию, эта функция возвращает количество раз, которое анимация должна циклически повторяться. Если формат изображения не поддерживает анимацию, возвращается 0.
[virtual] int QImageIOHandler::nextImageDelay() const
Для форматов изображений, поддерживающих анимацию, эта функция возвращает количество миллисекунд, которое нужно подождать до чтения следующего изображения. Если формат изображения не поддерживает анимацию, возвращается 0.
[virtual] QVariant QImageIOHandler::option(QImageIOHandler::ImageOption option) const
Возвращает значение, назначенное для option, как QVariant. Тип значения зависит от параметра. Например, option(Size) возвращает QSize вариант.
См. также setOption() и supportsOption().
[pure virtual] bool QImageIOHandler::read(QImage *image)
Читает изображение с устройства и сохраняет его в image. Возвращает true если изображение успешно считано; в противном случае возвращает false.
Для форматов изображений, поддерживающих инкрементную загрузку, и для форматов анимации, обработчик изображений может предполагать, что image указывает на предыдущий кадр.
См. также canRead().
void QImageIOHandler::setDevice(QIODevice *device)
Устанавливает устройство обработчика изображений QImageIOHandler на device. Обработчик изображений будет использовать это устройство при чтении и записи изображений.
Устройство может быть установлено только один раз и должно быть установлено перед вызовом canRead(), read(), write() и т. д. Если вам нужно прочитать несколько файлов, создайте несколько экземпляров соответствующего подкласса QImageIOHandler.
См. также device().
void QImageIOHandler::setFormat(const QByteArray &format)
Устанавливает формат обработчика изображений QImageIOHandler на format. Формат наиболее полезен для обработчиков, которые поддерживают несколько форматов изображений.
См. также format().
void QImageIOHandler::setFormat(const QByteArray &format) const
Устанавливает формат обработчика изображений QImageIOHandler на format. Формат наиболее полезен для обработчиков, которые поддерживают несколько форматов изображений.
Эта функция объявлена const, чтобы ее можно было вызвать из canRead().
См. также format().
[virtual] void QImageIOHandler::setOption(QImageIOHandler::ImageOption option, const QVariant &value)
Устанавливает параметр option со значением value.
См. также option() и ImageOption.
[virtual] bool QImageIOHandler::supportsOption(QImageIOHandler::ImageOption option) const
Возвращает true если QImageIOHandler поддерживает параметр option; в противном случае возвращает false. Например, если QImageIOHandler поддерживает параметр Size, supportsOption(Size) должно возвращать true.
См. также setOption() и option().
[virtual] bool QImageIOHandler::write(const QImage &image)
Записывает изображение image в назначенное устройство. Возвращает true при успехе; в противном случае возвращает false.
Реализация по умолчанию ничего не делает и просто возвращает false.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qimageiohandler.html