Класс QImage
Класс QImage предоставляет аппаратно-независимое представление изображения, позволяющее получить прямой доступ к данным пикселей, и может быть использован в качестве устройства рисования. Подробнее...
| Заголовок: | #include <QImage> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Наследует: | QPaintDevice |
Примечание: Все функции в этом классе являются перевходными.
Общедоступные типы
| Перечисление | Формат { Format_Invalid, Format_Mono, Format_MonoLSB, Format_Indexed8, Format_RGB32, …, Format_BGR888 } |
| Перечисление | РежимИнвертирования { InvertRgb, InvertRgba } |
Общедоступные функции
| QImage(QImage &&other) | |
| QImage(const QImage &image) | |
| QImage(const QString &fileName, const char *format = nullptr) | |
| QImage(const char *const [] xpm) | |
| QImage(const uchar *data, int width, int height, qsizetype bytesPerLine, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr) | |
| QImage(uchar *data, int width, int height, qsizetype bytesPerLine, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr) | |
| QImage(const uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr) | |
| QImage(uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr) | |
| QImage(int width, int height, QImage::Format format) | |
| QImage(const QSize &size, QImage::Format format) | |
| QImage() | |
| QImage & | operator=(QImage &&other) |
| QImage & | operator=(const QImage &image) |
| virtual | ~QImage() |
| bool | allGray() const |
| void | applyColorTransform(const QColorTransform &transform) |
| int | bitPlaneCount() const |
| uchar * | bits() |
| const uchar * | bits() const |
| qsizetype | bytesPerLine() const |
| qint64 | cacheKey() const |
| QRgb | color(int i) const |
| int | colorCount() const |
| QColorSpace | colorSpace() const |
| QList<QRgb> | colorTable() const |
| const uchar * | constBits() const |
| const uchar * | constScanLine(int i) const |
| void | convertTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) |
| void | convertToColorSpace(const QColorSpace &colorSpace) |
| QImage | convertToFormat(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const & |
| QImage | convertToFormat(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) && |
| QImage | convertToFormat(QImage::Format format, const QList<QRgb> &colorTable, Qt::ImageConversionFlags flags = Qt::AutoColor) const |
| QImage | convertedTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const & |
| QImage | convertedTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) && |
| QImage | convertedToColorSpace(const QColorSpace &colorSpace) const |
| QImage | copy(const QRect &rectangle = QRect()) const |
| QImage | copy(int x, int y, int width, int height) const |
| QImage | createAlphaMask(Qt::ImageConversionFlags flags = Qt::AutoColor) const |
| QImage | createHeuristicMask(bool clipTight = true) const |
| QImage | createMaskFromColor(QRgb color, Qt::MaskMode mode = Qt::MaskInColor) const |
| int | depth() const |
| qreal | devicePixelRatio() const |
| int | dotsPerMeterX() const |
| int | dotsPerMeterY() const |
| void | fill(uint pixelValue) |
| void | fill(const QColor &color) |
| void | fill(Qt::GlobalColor color) |
| QImage::Format | format() const |
| bool | hasAlphaChannel() const |
| int | height() const |
| void | invertPixels(QImage::InvertMode mode = InvertRgb) |
| bool | isGrayscale() const |
| bool | isNull() const |
| bool | load(const QString &fileName, const char *format = nullptr) |
| bool | load(QIODevice *device, const char *format) |
| bool | loadFromData(const uchar *data, int len, const char *format = nullptr) |
| bool | loadFromData(const QByteArray &data, const char *format = nullptr) |
| void | mirror(bool horizontal = false, bool vertical = true) |
| QImage | mirrored(bool horizontal = false, bool vertical = true) const & |
| QImage | mirrored(bool horizontal = false, bool vertical = true) && |
| QPoint | смещение() const |
| QRgb | pixel(const QPoint &position) const |
| QRgb | pixel(int x, int y) const |
| QColor | цветПикселя(const QPoint &position) const |
| QColor | цветПикселя(int x, int y) const |
| QPixelFormat | форматПикселей() const |
| int | индексПикселя(const QPoint &position) const |
| int | индексПикселя(int x, int y) const |
| QRect | прямоугольник() const |
| bool | переинтерпретироватьКакФормат(QImage::Format format) |
| void | переместитьRGB() |
| QImage | сЗамененнымRGB() const & |
| QImage | сЗамененнымRGB() && |
| bool | сохранить(const QString &fileName, const char *format = nullptr, int quality = -1) const |
| bool | сохранить(QIODevice *device, const char *format = nullptr, int quality = -1) const |
| QImage | масштабировать(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const |
| QImage | масштабировать(int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const |
| QImage | масштабироватьПоВысоте(int height, Qt::TransformationMode mode = Qt::FastTransformation) const |
| QImage | масштабироватьПоШирине(int width, Qt::TransformationMode mode = Qt::FastTransformation) const |
| uchar * | строкаСканирования(int i) |
| const uchar * | строкаСканирования(int i) const |
| void | установитьАльфаКанал(const QImage &alphaChannel) |
| void | установитьЦвет(int index, QRgb colorValue) |
| void | установитьКоличествоЦветов(int colorCount) |
| void | установитьЦветовоеПространство(const QColorSpace &colorSpace) |
| void | установитьЦветовыеТаблицы(const QList<QRgb> &colors) |
| void | установитьОтношениеПикселейУстройства(qreal scaleFactor) |
| void | установитьТочкиНаМетрX(int x) |
| void | установитьТочкиНаМетрY(int y) |
| void | установитьСмещение(const QPoint &offset) |
| void | установитьПиксель(const QPoint &position, uint index_or_rgb) |
| void | установитьПиксель(int x, int y, uint index_or_rgb) |
| void | установитьЦветПикселя(const QPoint &position, const QColor &color) |
| void | установитьЦветПикселя(int x, int y, const QColor &color) |
| void | установитьТекст(const QString &key, const QString &text) |
| QSize | размер() const |
| qsizetype | размерВбайтах() const |
| void | обменять(QImage &other) |
| QString | текст(const QString &key = QString()) const |
| QStringList | ключиТекста() const |
| CGImageRef | вCGImage() const |
| HBITMAP | вHBITMAP() const |
| HICON | вHICON(const QImage &mask = {}) const |
| QImage | преобразовать(const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const |
| bool | валидный(const QPoint &pos) const |
| bool | валидный(int x, int y) const |
| int | ширина() const |
| QVariant | operator QVariant() const |
| bool | не равно(const QImage &image) const |
| bool | равно(const QImage &image) const |
Статические публичные члены
| QImage | fromData(const uchar *data, int size, const char *format = nullptr) |
| QImage | fromData(const QByteArray &data, const char *format = nullptr) |
| QImage | fromHBITMAP(HBITMAP hbitmap) |
| QImage | fromHICON(HICON icon) |
| QImage::Format | toImageFormat(QPixelFormat format) |
| QPixelFormat | toPixelFormat(QImage::Format format) |
| QTransform | trueMatrix(const QTransform &matrix, int width, int height) |
Связанные нечленные элементы
| QImageCleanupFunction | |
| QDataStream & | operator<<(QDataStream &stream, const QImage &image) |
| QDataStream & | operator>>(QDataStream &stream, QImage &image) |
Подробное описание
Qt предоставляет четыре класса для обработки данных изображений: QImage, QPixmap, QBitmap и QPicture. QImage разработан и оптимизирован для ввода-вывода и прямого доступа и манипулирования пикселями, а QPixmap — для отображения изображений на экране. QBitmap — это всего лишь вспомогательный класс, наследующий QPixmap, обеспечивающий глубину 1. Наконец, класс QPicture — это устройство рисования, которое записывает и воспроизводит команды QPainter.
Поскольку QImage является подклассом QPaintDevice, QPainter может использоваться для прямого рисования на изображениях. При использовании QPainter на QImage рисование может выполняться в другом потоке, отличном от текущего потока GUI.
Класс QImage поддерживает несколько форматов изображений, описанных в перечислении Format. Они включают монохромные, 8-битные, 32-битные и изображения с альфа-каналом, доступные во всех версиях Qt 4.x.
QImage предоставляет набор функций, которые могут использоваться для получения различной информации об изображении. Также есть несколько функций, которые позволяют преобразовать изображение.
Объекты QImage могут передаваться по значению, так как класс QImage использует неявное совместное использование данных. Объекты QImage также могут быть сериализованы и сравниваются.
Примечание: Если вы хотите загружать объекты QImage в статической сборке Qt, см. Инструкцию по плагинам.
Предупреждение: Рисование на QImage с форматом QImage::Format_Indexed8 не поддерживается.
Чтение и запись файлов изображений
QImage предоставляет несколько способов загрузки файла изображения: файл можно загрузить при создании объекта QImage или с помощью функций load() или loadFromData() позднее. QImage также предоставляет статическую функцию fromData() для создания QImage из заданных данных. При загрузке изображения имя файла может ссылаться на фактический файл на диске или на один из встроенных ресурсов приложения. См. обзор Системы ресурсов Qt для получения подробной информации о том, как встроить изображения и другие файлы ресурсов в исполняемый файл приложения.
Для сохранения объекта QImage просто вызовите функцию save().
Полный список поддерживаемых форматов файлов доступен в функциях QImageReader::supportedImageFormats() и QImageWriter::supportedImageFormats(). Новые форматы файлов могут быть добавлены в качестве плагинов. По умолчанию Qt поддерживает следующие форматы:
| Формат | Описание | Поддержка Qt |
|---|---|---|
| BMP | Windows Bitmap | Чтение/запись |
| GIF | Graphic Interchange Format (необязательно) | Чтение |
| JPG | Joint Photographic Experts Group | Чтение/запись |
| JPEG | Joint Photographic Experts Group | Чтение/запись |
| PNG | Portable Network Graphics | Чтение/запись |
| PBM | Portable Bitmap | Чтение |
| PGM | Portable Graymap | Чтение |
| PPM | Portable Pixmap | Чтение/запись |
| XBM | X11 Bitmap | Чтение/запись |
| XPM | X11 Pixmap | Чтение/запись |
Информация об изображении
QImage предоставляет набор функций, которые могут использоваться для получения различной информации об изображении:
| Доступные функции | |
|---|---|
| Геометрия | Функции size(), width(), height(), dotsPerMeterX() и dotsPerMeterY() предоставляют информацию о размерах и соотношении сторон изображения. Функция rect() возвращает ограничивающую прямоугольник изображения. Функция valid() указывает, находится ли заданная пара координат в пределах этого прямоугольника. Функция offset() возвращает количество пикселей, на которое изображение должно быть смещено при позиционировании относительно других изображений, которое также может быть изменено с помощью функции setOffset(). |
| Цвета | Цвет пикселя можно получить, передав его координаты функции pixel(). Функция pixel() возвращает цвет в виде значения QRgb, независимо от формата изображения. В случае монохромных и 8-битных изображений функции colorCount() и colorTable() предоставляют информацию о компонентах цвета, используемых для хранения данных изображения: функция colorTable() возвращает всю таблицу цветов изображения. Для получения отдельной записи используйте функцию pixelIndex() для получения индекса пикселя для заданной пары координат, а затем функцию color() для получения цвета. Обратите внимание, что если вы создаете 8-битное изображение вручную, вам также необходимо установить корректную таблицу цветов для изображения. Функция hasAlphaChannel() указывает, учитывает ли формат изображения альфа-канал. Функции allGray() и isGrayscale() указывают, состоят ли цвета изображения только из оттенков серого. См. также разделы Манипуляции с пикселями и Преобразования изображений. |
| Текст | Функция text() возвращает текст изображения, связанный с заданным ключом текста. Ключи текста изображения можно получить с помощью функции textKeys(). Используйте функцию setText() для изменения текста изображения. |
| Информация низкого уровня | Функция depth() возвращает глубину изображения. Поддерживаемые глубины — 1 (монохромное), 8, 16, 24 и 32 бита. Функция bitPlaneCount() указывает количество используемых битов. Дополнительную информацию см. в разделе Форматы изображений. Функции format(), bytesPerLine() и sizeInBytes() предоставляют информацию низкого уровня о данных, хранящихся в изображении. Функция cacheKey() возвращает число, которое однозначно идентифицирует содержимое этого объекта QImage. |
Манипуляции с пикселями
Функции, используемые для манипулирования пикселями изображения, зависят от формата изображения. Причина в том, что монохромные и 8-битные изображения основаны на индексах и используют таблицу поиска цветов, в то время как 32-битные изображения хранят значения ARGB напрямую. Дополнительную информацию о форматах изображений см. в разделе Форматы изображений.
В случае 32-битного изображения функцию setPixel() можно использовать для изменения цвета пикселя в заданных координатах на любой другой цвет, указанный как четвёрка ARGB. Для создания подходящего значения QRgb используйте функции qRgb() (добавляя стандартный альфа-компонент к заданным значениям RGB, то есть создавая непрозрачный цвет) или qRgba(). Например:
| 32-битное | |
|---|---|
QImage image(3, 3, QImage::Format_RGB32); QRgb value; value = qRgb(189, 149, 39); // 0xffbd9527 image.setPixel(1, 1, value); value = qRgb(122, 163, 39); // 0xff7aa327 image.setPixel(0, 1, value); image.setPixel(1, 0, value); value = qRgb(237, 187, 51); // 0xffedba31 image.setPixel(2, 1, value); |
|
В случае 8-битных и монохромных изображений значение пикселя — это только индекс из таблицы цветов изображения. Таким образом, функцию setPixel() можно использовать только для изменения цвета пикселя в заданных координатах на предопределённый цвет из таблицы цветов изображения, то есть можно изменить только значение индекса пикселя. Для изменения или добавления цвета в таблицу цветов изображения используйте функцию setColor().
Запись в таблице цветов — это четвёрка ARGB, закодированная как значение QRgb. Используйте функции qRgb() и qRgba() для создания подходящего значения QRgb для использования с функцией setColor(). Например:
| 8-битный | |
|---|---|
QImage image(3, 3, QImage::Format_Indexed8); QRgb value; value = qRgb(122, 163, 39); // 0xff7aa327 image.setColor(0, value); value = qRgb(237, 187, 51); // 0xffedba31 image.setColor(1, value); value = qRgb(189, 149, 39); // 0xffbd9527 image.setColor(2, value); image.setPixel(0, 1, 0); image.setPixel(1, 0, 0); image.setPixel(1, 1, 2); image.setPixel(2, 1, 1); |
|
Для изображений с более чем 8 битами на цветовой канал. Методы setPixelColor() и pixelColor() могут использоваться для установки и получения значений QColor.
QImage также предоставляет функцию scanLine(), которая возвращает указатель на данные пикселей на строке сканирования с заданным индексом, и функцию bits(), которая возвращает указатель на данные первых пикселей (это эквивалентно scanLine(0)).
Форматы изображений
Каждый пиксель, хранящийся в QImage, представлен целым числом. Размер целого числа зависит от формата. QImage поддерживает несколько форматов изображений, описанных в перечислении Format.
Монохромные изображения хранятся с использованием 1-битных индексов в таблице цветов с максимум двумя цветами. Существуют два разных типа монохромных изображений: big endian (MSB сначала) или little endian (LSB сначала) порядок битов.
8-битные изображения хранятся с использованием 8-битных индексов в таблице цветов, т.е. они имеют один байт на пиксель. Таблица цветов представляет собой QList<QRgb>, а тип QRgb эквивалентен беззнаковому целому числу, содержащему четвёрку ARGB в формате 0xAARRGGBB.
32-битные изображения не имеют таблицы цветов; вместо этого каждый пиксель содержит значение QRgb. Существует три разных типа 32-битных изображений, хранящих значения RGB (т.е. 0xffRRGGBB), ARGB и умноженные ARGB соответственно. В предварительно умноженном формате красные, зелёные и синие каналы умножаются на альфа-компонент, делённый на 255.
Формат изображения можно получить с помощью функции format(). Используйте функции convertToFormat() для преобразования изображения в другой формат. Функции allGray() и isGrayscale() указывают, можно ли безопасно преобразовать цветное изображение в градацию серого.
Преобразования изображений
QImage поддерживает ряд функций для создания нового изображения, являющегося преобразованной версией исходного: функция createAlphaMask() создаёт и возвращает маску 1 бита из буфера альфа-канала в этом изображении, а функция createHeuristicMask() создаёт и возвращает эвристическую маску 1 бита для этого изображения. Последняя функция работает путём выбора цвета из одного из углов, затем удаляя пиксели этого цвета, начиная с всех краёв.
Функция mirrored() возвращает зеркальное отображение изображения в желаемом направлении, функция scaled() возвращает копию изображения, масштабированную до прямоугольника желаемых размеров, а функция rgbSwapped() создаёт изображение BGR из изображения RGB.
Функции scaledToWidth() и scaledToHeight() возвращают масштабированные копии изображения.
Функция transformed() возвращает копию изображения, преобразованную с помощью заданной матрицы преобразования и режима преобразования: внутренне матрица преобразования корректируется для компенсации нежелательного смещения, т.е. transformed() возвращает наименьшее изображение, содержащее все преобразованные точки исходного изображения. Статическая функция trueMatrix() возвращает фактическую матрицу, используемую для преобразования изображения.
Также существуют функции для изменения атрибутов изображения на месте:
| Функция | Описание |
|---|---|
| setDotsPerMeterX() | Определяет соотношение сторон, задавая количество пикселей, помещающихся по горизонтали в физический метр. |
| setDotsPerMeterY() | Определяет соотношение сторон, задавая количество пикселей, помещающихся по вертикали в физический метр. |
| fill() | Заполняет всё изображение заданным значением пикселя. |
| invertPixels() | Инвертирует все значения пикселей в изображении, используя заданное значение InvertMode. |
| setColorTable() | Устанавливает таблицу цветов, используемую для перевода индексов цветов. Только для монохромных и 8-битных форматов. |
| setColorCount() | Изменяет размер таблицы цветов. Только для монохромных и 8-битных форматов. |
См. также QImageReader, QImageWriter, QPixmap, QSvgRenderer, Пример композиции изображений, Пример просмотрщика изображений, Пример Scribble и Пример Pixelator.
Документация типов членов
перечисление QImage::Format
В Qt доступны следующие форматы изображений. См. примечания после таблицы.
| Постоянная | Значение | Описание |
|---|---|---|
QImage::Format_Invalid |
0 |
Изображение недействительно. |
QImage::Format_Mono |
1 |
Изображение хранится с использованием 1 бита на пиксель. Байты упакованы с старшего бита (MSB) первым. |
QImage::Format_MonoLSB |
2 |
Изображение хранится с использованием 1 бита на пиксель. Байты упакованы с младшего бита (LSB) первым. |
QImage::Format_Indexed8 |
3 |
Изображение хранится с использованием 8-битовых индексов в палитру цветов. |
QImage::Format_RGB32 |
4 |
Изображение хранится в 32-битном формате RGB (0xffRRGGBB). |
QImage::Format_ARGB32 |
5 |
Изображение хранится в 32-битном формате ARGB (0xAARRGGBB). |
QImage::Format_ARGB32_Premultiplied |
6 |
Изображение хранится в предварительно умноженном 32-битном формате ARGB (0xAARRGGBB), т.е. каналы красного, зелёного и синего умножаются на альфа-компонент, делённый на 255. (Если RR, GG или BB имеет более высокое значение, чем альфа-канал, результаты неопределены.) Некоторые операции (такие как композиция изображений с использованием альфа-смешивания) выполняются быстрее с предварительно умноженным ARGB32, чем с обычным ARGB32. |
QImage::Format_RGB16 |
7 |
Изображение хранится в 16-битном формате RGB (5-6-5). |
QImage::Format_ARGB8565_Premultiplied |
8 |
Изображение хранится в предварительно умноженном 24-битном формате ARGB (8-5-6-5). |
QImage::Format_RGB666 |
9 |
Изображение хранится в 24-битном формате RGB (6-6-6). Неиспользуемые старшие биты всегда равны нулю. |
QImage::Format_ARGB6666_Premultiplied |
10 |
Изображение хранится в предварительно умноженном 24-битном формате ARGB (6-6-6-6). |
QImage::Format_RGB555 |
11 |
Изображение хранится в 16-битном формате RGB (5-5-5). Неиспользуемый старший бит всегда равен нулю. |
QImage::Format_ARGB8555_Premultiplied |
12 |
Изображение хранится в предварительно умноженном 24-битном формате ARGB (8-5-5-5). |
QImage::Format_RGB888 |
13 |
Изображение хранится в 24-битном формате RGB (8-8-8). |
QImage::Format_RGB444 |
14 |
Изображение хранится в 16-битном формате RGB (4-4-4). Неиспользуемые биты всегда равны нулю. |
QImage::Format_ARGB4444_Premultiplied |
15 |
Изображение хранится в предварительно умноженном 16-битном формате ARGB (4-4-4-4). |
QImage::Format_RGBX8888 |
16 |
Изображение хранится в 32-битном байтовом формате RGB(x) (8-8-8-8). Это то же самое, что и Format_RGBA8888, за исключением того, что альфа всегда должна быть 255. (добавлен в Qt 5.2) |
QImage::Format_RGBA8888 |
17 |
Изображение хранится в 32-битном байтовом формате RGBA (8-8-8-8). В отличие от ARGB32, это байтовый формат, что означает, что 32-битовое кодирование отличается между архитектурами с big endian и little endian, соответственно (0xRRGGBBAA) и (0xAABBGGRR). Порядок цветов одинаков на любой архитектуре, если читать как байты 0xRR, 0xGG, 0xBB, 0xAA. (добавлен в Qt 5.2) |
QImage::Format_RGBA8888_Premultiplied |
18 |
Изображение хранится в предварительно умноженном 32-битном байтовом формате RGBA (8-8-8-8). (добавлен в Qt 5.2) |
QImage::Format_BGR30 |
19 |
Изображение хранится в 32-битном формате BGR (x-10-10-10). (добавлен в Qt 5.4) |
QImage::Format_A2BGR30_Premultiplied |
20 |
Изображение хранится в 32-битном предварительно умноженном формате ABGR (2-10-10-10). (добавлен в Qt 5.4) |
QImage::Format_RGB30 |
21 |
Изображение хранится в 32-битном формате RGB (x-10-10-10). (добавлен в Qt 5.4) |
QImage::Format_A2RGB30_Premultiplied |
22 |
Изображение хранится в 32-битном предварительно умноженном формате ARGB (2-10-10-10). (добавлен в Qt 5.4) |
QImage::Format_Alpha8 |
23 |
Изображение хранится в 8-битном формате только альфа. (добавлен в Qt 5.5) |
QImage::Format_Grayscale8 |
24 |
Изображение хранится в 8-битном формате серого уровня. (добавлен в Qt 5.5) |
QImage::Format_Grayscale16 |
28 |
Изображение хранится в 16-битном формате серого уровня. (добавлен в Qt 5.13) |
QImage::Format_RGBX64 |
25 |
Изображение хранится в 64-битном полусловесном формате RGB(x) (16-16-16-16). Это то же самое, что и Format_RGBA64, за исключением того, что альфа должна всегда быть 65535. (добавлен в Qt 5.12) |
QImage::Format_RGBA64 |
26 |
Изображение хранится в 64-битном полусловесном формате RGBA (16-16-16-16). (добавлен в Qt 5.12) |
QImage::Format_RGBA64_Premultiplied |
27 |
Изображение хранится в предварительно умноженном 64-битном полусловесном формате RGBA (16-16-16-16). (добавлен в Qt 5.12) |
QImage::Format_BGR888 |
29 |
Изображение хранится в 24-битном формате BGR. (добавлен в Qt 5.14) |
Примечание: Рисование в QImage с QImage::Format_Indexed8 не поддерживается.
Примечание: Избегайте большинства операций рендеринга напрямую в большинство этих форматов с использованием QPainter. Лучше всего оптимизировать рендеринг для форматов Format_RGB32 и Format_ARGB32_Premultiplied, а вторым приоритетом стоит рендеринг в форматы Format_RGB16, Format_RGBX8888, Format_RGBA8888_Premultiplied, Format_RGBX64 и Format_RGBA64_Premultiplied
См. также format() и convertToFormat().
перечисление QImage::InvertMode
Это тип перечисления используется для описания того, как значения пикселей должны быть инвертированы в функции invertPixels().
| Постоянная | Значение | Описание |
|---|---|---|
QImage::InvertRgb |
0 |
Инвертировать только значения RGB и оставить альфа-канал без изменений. |
QImage::InvertRgba |
1 |
Инвертировать все каналы, включая альфа-канал. |
См. также invertPixels().
Документация по функциям-членам
Возвращает QImage, в котором значения красного и синего компонентов всех пикселей поменяны местами, фактически преобразовывая изображение RGB в изображение BGR.
Исходный QImage не изменяется.
См. также rgbSwap() и Преобразования изображений.
QImage QImage::mirrored(bool horizontal = false, bool vertical = true) &&
QImage QImage::mirrored(bool horizontal = false, bool vertical = true) const &
Возвращает отражённое изображение, отражённое по горизонтали и/или по вертикали в зависимости от того, установлены ли horizontal и vertical в значение true или false.
Обратите внимание, что исходное изображение не изменяется.
См. также mirror() и Преобразования изображений.
QImage QImage::convertedTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) &&
QImage QImage::convertedTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const &
Возвращает копию изображения в заданном формате format.
Указанные флаги преобразования изображений управляют тем, как данные изображения обрабатываются во время процесса преобразования.
Эта функция была добавлена в Qt 6.0.
См. также convertTo() и Форматы изображений.
QImage QImage::convertToFormat(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) &&
QImage QImage::convertToFormat(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const &
Возвращает копию изображения в заданном формате format.
Указанные флаги преобразования изображения flags контролируют, как обрабатываются данные изображения во время процесса преобразования.
См. также convertTo() и Форматы изображений.
[since 5.2] QImage::QImage(QImage &&other)
Создаёт экземпляр QImage, позволяя ему указывать на тот же объект, на который указывал other.
Эта функция была добавлена в Qt 5.2.
QImage::QImage(const QImage &image)
Создаёт поверхностную копию заданного изображения image.
Дополнительную информацию о поверхностных копиях см. в документации по Неявной совместной работе с данными.
См. также copy().
QImage::QImage(const QString &fileName, const char *format = nullptr)
Создаёт изображение и пытается загрузить его из файла с заданным именем файла fileName.
Загрузчик пытается прочитать изображение с использованием указанного формата format. Если формат format не указан (что является значением по умолчанию), он определяется автоматически на основе расширения и заголовка файла. Подробнее см. {QImageReader::setAutoDetectImageFormat()}{QImageReader}.
Если загрузка изображения не удалась, этот объект — пустое изображение.
Имя файла может ссылаться на фактический файл на диске или на один из встроенных ресурсов приложения. См. обзор Системы ресурсов для получения информации о том, как встраивать изображения и другие файлы ресурсов в исполняемый файл приложения.
См. также isNull() и Чтение и запись файлов изображений.
QImage::QImage(const char *const [] xpm)
Создаёт изображение из заданного изображения xpm.
Убедитесь, что изображение является допустимым изображением XPM. Ошибки игнорируются.
Обратите внимание, что можно немного сжать переменную XPM, используя необычное объявление:
static const char * const start_xpm[] = {
"16 15 8 1",
"a c #cec6bd",
// etc.
}; Дополнительный const делает всё определение только для чтения, что немного эффективнее (например, когда код находится в общей библиотеке) и может храниться в ПЗУ вместе с приложением.
QImage::QImage(const uchar *data, int width, int height, qsizetype bytesPerLine, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
Создаёт изображение с заданной шириной width, высотой height и форматом format, использующее имеющийся буфер памяти data. Ширина и высота должны быть указаны в пикселях. bytesPerLine указывает количество байт в строке (шаг).
Буфер должен оставаться допустимым на протяжении всего жизненного цикла QImage и всех копий, которые не были изменены или каким-либо образом отсоединены от исходного буфера. Изображение не удаляет буфер при уничтожении. Вы можете указать указатель на функцию cleanupFunction вместе с дополнительным указателем cleanupInfo, которые будут вызваны при уничтожении последней копии.
Если format — формат индексированного цвета, таблица цветов изображения первоначально пуста и должна быть достаточно расширена с помощью setColorCount() или setColorTable() перед использованием изображения.
В отличие от аналогичного конструктора QImage, принимающего буфер данных, который не является константным, этот вариант никогда не изменяет содержимое буфера. Например, вызов QImage::bits() вернёт глубокую копию изображения, а не буфер, переданный в конструктор. Это позволяет эффективно создавать QImage из исходных данных без возможности изменения исходных данных.
QImage::QImage(uchar *data, int width, int height, qsizetype bytesPerLine, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
Создаёт изображение с заданной шириной width, высотой height и форматом format, использующее имеющийся буфер памяти data. Ширина и высота должны быть указаны в пикселях. bytesPerLine указывает количество байт в строке (шаг).
Буфер должен оставаться допустимым на протяжении всего жизненного цикла QImage и всех копий, которые не были изменены или каким-либо образом отсоединены от исходного буфера. Изображение не удаляет буфер при уничтожении. Вы можете указать указатель на функцию cleanupFunction вместе с дополнительным указателем cleanupInfo, которые будут вызваны при уничтожении последней копии.
Если format — формат индексированного цвета, таблица цветов изображения первоначально пуста и должна быть достаточно расширена с помощью setColorCount() или setColorTable() перед использованием изображения.
QImage::QImage(const uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
Создаёт изображение с заданной шириной width, высотой height и форматом format, использующее имеющийся в чтении буфер памяти data. Ширина и высота должны быть указаны в пикселях, data должен быть выровнен по 32 битам, а каждая строка данных в изображении также должна быть выровнена по 32 битам.
Буфер должен оставаться допустимым на протяжении всего жизненного цикла QImage и всех копий, которые не были изменены или каким-либо образом отсоединены от исходного буфера. Изображение не удаляет буфер при уничтожении. Вы можете указать указатель на функцию cleanupFunction вместе с дополнительным указателем cleanupInfo, которые будут вызваны при уничтожении последней копии.
Если format — формат индексированного цвета, таблица цветов изображения первоначально пуста и должна быть достаточно расширена с помощью setColorCount() или setColorTable() перед использованием изображения.
В отличие от аналогичного конструктора QImage, принимающего буфер данных, который не является константным, этот вариант никогда не изменяет содержимое буфера. Например, вызов QImage::bits() вернёт глубокую копию изображения, а не буфер, переданный в конструктор. Это позволяет эффективно создавать QImage из исходных данных без возможности изменения исходных данных.
QImage::QImage(uchar *data, int width, int height, QImage::Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr)
Создаёт изображение с заданной шириной width, высотой height и форматом format, использующее имеющийся буфер памяти data. Ширина и высота должны быть указаны в пикселях, data должен быть выровнен по 32 битам, а каждая строка данных в изображении также должна быть выровнена по 32 битам.
Буфер должен оставаться допустимым на протяжении всего жизненного цикла QImage и всех копий, которые не были изменены или каким-либо образом отсоединены от исходного буфера. Изображение не удаляет буфер при уничтожении. Вы можете указать указатель на функцию cleanupFunction вместе с дополнительным указателем cleanupInfo, которые будут вызваны при уничтожении последней копии.
Если format — формат индексированного цвета, таблица цветов изображения первоначально пуста и должна быть достаточно расширена с помощью setColorCount() или setColorTable() перед использованием изображения.
QImage::QImage(int width, int height, QImage::Format format)
Создаёт изображение с заданной шириной width, высотой height и форматом format.
Если память не может быть выделена, будет возвращено пустое изображение.
Предупреждение: Это создаст QImage с неинициализированными данными. Вызовите fill(), чтобы заполнить изображение подходящим значением пикселя перед отрисовкой на нём с помощью QPainter.
QImage::QImage(const QSize &size, QImage::Format format)
Создаёт изображение с заданным размером size и форматом format.
Если память не может быть выделена, возвращается пустое изображение.
Предупреждение: Это создаст QImage с неинициализированными данными. Вызовите fill(), чтобы заполнить изображение подходящим значением пикселя перед отрисовкой на нём с помощью QPainter.
QImage::QImage()
Создаёт пустое изображение.
См. также isNull().
[since 5.2] QImage &QImage::operator=(QImage &&other)
Перемещающее присваивание other этому экземпляру QImage.
Эта функция была добавлена в Qt 5.2.
QImage &QImage::operator=(const QImage &image)
Присваивает неглубокую копию заданного image этому изображению и возвращает ссылку на это изображение.
Дополнительную информацию о неглубоких копиях см. в документации по Неявной совместной работе с данными.
[virtual] QImage::~QImage()
Удаляет изображение и очищает ресурсы.
bool QImage::allGray() const
Возвращает true если все цвета в изображении являются оттенками серого (т. е. их компоненты красного, зеленого и синего равны); в противном случае возвращает false.
Обратите внимание, что эта функция медленная для изображений без цветовой таблицы.
См. также isGrayscale().
[since 5.14] void QImage::applyColorTransform(const QColorTransform &transform)
Применяет цветовое преобразование transform ко всем пикселям изображения.
Эта функция была добавлена в Qt 5.14.
int QImage::bitPlaneCount() const
Возвращает количество плоскостей битов в изображении.
Количество плоскостей битов — это количество битов информации о цвете и прозрачности для каждого пикселя. Это отличается от (т. е. меньше) глубины, когда формат изображения содержит неиспользуемые биты.
См. также depth(), format() и Форматы изображений.
uchar *QImage::bits()
Возвращает указатель на данные первых пикселей. Это эквивалентно scanLine(0).
Обратите внимание, что QImage использует неявную совместную работу с данными. Эта функция выполняет глубокую копию общих данных пикселей, гарантируя, что этот экземпляр QImage является единственным, использующим текущее возвращаемое значение.
См. также scanLine(), sizeInBytes() и constBits().
const uchar *QImage::bits() const
Это перегруженная функция.
Обратите внимание, что QImage использует неявную совместную работу с данными, но эта функция не выполняет глубокую копию общих данных пикселей, поскольку возвращаемые данные являются константными.
qsizetype QImage::bytesPerLine() const
Возвращает количество байтов на строке сканирования изображения.
Это эквивалентно sizeInBytes() / height() если height() не равно нулю.
См. также scanLine().
qint64 QImage::cacheKey() const
Возвращает число, которое идентифицирует содержимое этого объекта QImage. Различные объекты QImage могут иметь одинаковый ключ только в том случае, если они ссылаются на одно и то же содержимое.
Ключ изменится при изменении изображения.
QRgb QImage::color(int i) const
Возвращает цвет в цветовой таблице по индексу i. Первый цвет имеет индекс 0.
Цвета в цветовой таблице изображения задаются как наборы ARGB (QRgb). Используйте функции qAlpha(), qRed(), qGreen() и qBlue(), чтобы получить компоненты значения цвета.
См. также setColor(), pixelIndex() и Обработка пикселей.
int QImage::colorCount() const
Возвращает размер цветовой таблицы изображения.
Обратите внимание, что colorCount() возвращает 0 для изображений 32-bpp, поскольку эти изображения не используют цветовые таблицы, а вместо этого кодируют значения пикселей как наборы ARGB.
См. также setColorCount() и Сведения об изображении.
[since 5.14] QColorSpace QImage::colorSpace() const
Возвращает цветовое пространство изображения, если цветовое пространство определено.
Эта функция была добавлена в Qt 5.14.
См. также setColorSpace().
QList<QRgb> QImage::colorTable() const
Возвращает список цветов, содержащихся в цветовой таблице изображения, или пустой список, если изображение не имеет цветовой таблицы.
См. также setColorTable(), colorCount() и color().
const uchar *QImage::constBits() const
Возвращает указатель на данные первых пикселей.
Обратите внимание, что QImage использует неявную совместную работу с данными, но эта функция не выполняет глубокую копию общих данных пикселей, поскольку возвращаемые данные являются константными.
См. также bits() и constScanLine().
const uchar *QImage::constScanLine(int i) const
Возвращает указатель на данные пикселей на строке сканирования с индексом i. Первая строка сканирования имеет индекс 0.
Данные строки сканирования выровнены по меньшей мере на 32 бита. Для 64-битных форматов выравнивание соответствует естественному выравниванию 64-битных целых чисел (64 бита для большинства платформ, но заметно 32 бита на i386).
Обратите внимание, что QImage использует неявную совместную работу с данными, но эта функция не выполняет глубокую копию общих данных пикселей, поскольку возвращаемые данные являются константными.
См. также scanLine() и constBits().
[since 5.13] void QImage::convertTo(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor)
Преобразует изображение в указанный format на месте, отсоединяя его при необходимости.
Указанные флаги преобразования изображений flags управляют тем, как обрабатываются данные изображения во время преобразования.
Эта функция была добавлена в Qt 5.13.
См. также convertedTo().
[since 5.14] void QImage::convertToColorSpace(const QColorSpace &colorSpace)
Преобразует изображение в colorSpace.
Если у изображения нет допустимого цветового пространства, метод ничего не делает.
Эта функция была добавлена в Qt 5.14.
См. также convertedToColorSpace() и setColorSpace().
QImage QImage::convertToFormat(QImage::Format format, const QList<QRgb> &colorTable, Qt::ImageConversionFlags flags = Qt::AutoColor) const
Это перегруженная функция.
Возвращает копию изображения, преобразованного в заданный format, используя указанную colorTable.
Преобразование из RGB-форматов в индексированные форматы — медленная операция и будет использовать прямой подход «ближайший цвет» без дithering.
[since 5.14] QImage QImage::convertedToColorSpace(const QColorSpace &colorSpace) const
Возвращает изображение, преобразованное в colorSpace.
Если у изображения нет допустимого цветового пространства, возвращается пустое QImage.
Эта функция была добавлена в Qt 5.14.
См. также convertToColorSpace().
QImage QImage::copy(const QRect &rectangle = QRect()) const
Возвращает подобласть изображения как новое изображение.
Возвращаемое изображение копируется из позиции (rectangle.x(), rectangle.y()) в этом изображении и всегда будет иметь размер заданного rectangle.
В областях за пределами этого изображения пиксели устанавливаются в 0. Для 32-битных RGB-изображений это означает черный цвет; для 32-битных ARGB-изображений это означает прозрачный черный; для 8-битных изображений это означает цвет с индексом 0 в цветовой таблице, который может быть любым; для 1-битных изображений это означает Qt::color0.
Если заданный rectangle — пустой прямоугольник, копируется всё изображение.
См. также QImage().
QImage QImage::copy(int x, int y, int width, int height) const
Это перегруженная функция.
Возвращаемое изображение копируется из позиции (x, y) в этом изображении и всегда будет иметь заданную width и height. В областях за пределами этого изображения пиксели устанавливаются в 0.
QImage QImage::createAlphaMask(Qt::ImageConversionFlags flags = Qt::AutoColor) const
Создаёт и возвращает маску 1 бита на пиксель из буфера альфа-канала этого изображения. Возвращает пустое изображение, если формат изображения — QImage::Format_RGB32.
Аргумент flags — битовое ИЛИ флагов Qt::ImageConversionFlags, и управляет процессом преобразования. Передача 0 для флагов устанавливает все параметры по умолчанию.
Возвращаемое изображение имеет порядок битов little-endian (т.е. формат изображения — QImage::Format_MonoLSB), который можно преобразовать в big-endian (QImage::Format_Mono) с помощью функции convertToFormat().
См. также createHeuristicMask() и Преобразования изображений.
QImage QImage::createHeuristicMask(bool clipTight = true) const
Создаёт и возвращает эвристическую маску 1 бита на пиксель для этого изображения.
Функция работает, выбирая цвет из одного из углов, затем удаляя пиксели этого цвета, начиная с всех краёв. Четыре угла голосуют за то, какой цвет нужно замаскировать. В случае ничьей (это, как правило, означает, что эта функция неприменима к изображению), результат произвольный.
Возвращаемое изображение имеет порядок битов little-endian (т.е. формат изображения — QImage::Format_MonoLSB), который можно преобразовать в big-endian (QImage::Format_Mono) с помощью функции convertToFormat().
Если clipTight равно true (значение по умолчанию), маска имеет минимальный размер, необходимый для покрытия пикселей; в противном случае маска больше, чем пиксели данных.
Обратите внимание, что эта функция игнорирует буфер альфа-канала.
См. также createAlphaMask() и Преобразования изображений.
QImage QImage::createMaskFromColor(QRgb color, Qt::MaskMode mode = Qt::MaskInColor) const
Создаёт и возвращает маску для этого изображения на основе заданного значения цвета color. Если mode равен MaskInColor (значение по умолчанию), все пиксели, соответствующие color, будут непрозрачными пикселями в маске. Если mode равен MaskOutColor, все пиксели, соответствующие заданному цвету, будут прозрачными.
См. также createAlphaMask() и createHeuristicMask().
int QImage::depth() const
Возвращает глубину изображения.
Глубина изображения — количество бит, используемых для хранения одного пикселя, также называемое битами на пиксель (bpp).
Поддерживаемые глубины: 1, 8, 16, 24, 32 и 64.
См. также bitPlaneCount(), convertToFormat(), Форматы изображений и Информация об изображении.
qreal QImage::devicePixelRatio() const
Возвращает коэффициент пикселей устройства для изображения. Это отношение между пикселями устройства и независимыми от устройства пикселями.
Используйте эту функцию при расчёте геометрии макета на основе размера изображения: QSize layoutSize = image.size() / image.devicePixelRatio()
Значение по умолчанию — 1,0.
См. также setDevicePixelRatio() и QImageReader.
int QImage::dotsPerMeterX() const
Возвращает количество пикселей, которые помещаются горизонтально в физический метр. Вместе с dotsPerMeterY() этот параметр определяет предполагаемый масштаб и соотношение сторон изображения.
См. также setDotsPerMeterX() и Информация об изображении.
int QImage::dotsPerMeterY() const
Возвращает количество пикселей, которые помещаются вертикально в физический метр. Вместе с dotsPerMeterX() этот параметр определяет предполагаемый масштаб и соотношение сторон изображения.
См. также setDotsPerMeterY() и Информация об изображении.
void QImage::fill(uint pixelValue)
Заполняет всё изображение заданным значением pixelValue.
Если глубина этого изображения 1, используется только младший бит. Если вы вызываете fill(0), fill(2) и т. д., то изображение заполняется нулями. Если вы вызываете fill(1), fill(3) и т. д., то изображение заполняется единицами. Если глубина 8, используются младшие 8 бит, а если глубина 16, используются младшие 16 бит.
Если глубина изображения больше 32 бит, результат неопределён.
Примечание: Нет соответствующей функции для получения значения, хотя QImage::pixelIndex() вернёт то же значение для индексированных форматов, а QImage::pixel() — для форматов RGB32, ARGB32 и ARGB32PM.
См. также depth() и Преобразования изображений.
void QImage::fill(const QColor &color)
Это перегруженная функция.
Заполняет всё изображение заданным цветом color.
Если глубина изображения 1, то изображение будет заполнено 1, если color равно Qt::color1; в противном случае оно будет заполнено 0.
Если глубина изображения 8, изображение будет заполнено индексом, соответствующим color в таблице цветов, если она присутствует; в противном случае оно будет заполнено 0.
void QImage::fill(Qt::GlobalColor color)
Это перегруженная функция.
Заполняет изображение заданным цветом, описанным как стандартный глобальный цвет.
QImage::Format QImage::format() const
Возвращает формат изображения.
См. также Форматы изображений.
QImage QImage::fromData(const uchar *data, int size, const char *format = nullptr)
Создаёт QImage из первых size байтов заданных двоичных данных data. Загрузчик пытается прочитать изображение с помощью указанного формата format. Если format не указан (это значение по умолчанию), загрузчик анализирует данные, чтобы определить формат файла.
Если format указан, он должен быть одним из значений, возвращаемых QImageReader::supportedImageFormats().
Если загрузка изображения завершается ошибкой, возвращаемое изображение будет пустым.
См. также load(), save() и Чтение и запись файлов изображений.
QImage QImage::fromData(const QByteArray &data, const char *format = nullptr)
Это перегруженная функция.
Загружает изображение из заданного QByteArray data.
QImage QImage::fromHBITMAP(HBITMAP hbitmap)
Возвращает QImage, эквивалентную заданному hbitmap.
HBITMAP не хранит информацию об альфа-канале.
В стандартном случае альфа-канал игнорируется, и создаётся полностью непрозрачное изображение (обычно формата QImage::Format_RGB32).
Однако есть случаи, когда альфа-канал используется, например, для значков приложений или значков области уведомлений. В таком случае необходимо вызвать convertToFormat() на возвращённом изображении, чтобы убедиться, что формат правильный.
Эта функция была добавлена в Qt 6.0.
См. также toHBITMAP() и reinterpretAsFormat().
QImage QImage::fromHICON(HICON icon)
Возвращает QImage, эквивалентную заданному icon.
Эта функция была добавлена в Qt 6.0.
См. также toHICON().
bool QImage::hasAlphaChannel() const
Возвращает true, если формат изображения поддерживает альфа-канал, в противном случае возвращает false.
См. также Информация об изображении.
int QImage::height() const
Возвращает высоту изображения.
См. также Информация об изображении.
void QImage::invertPixels(QImage::InvertMode mode = InvertRgb)
Инвертирует все значения пикселей в изображении.
Указанный режим инвертирования mode имеет значение только при глубине изображения 32. Значение по умолчанию — InvertRgb, которое оставляет альфа-канал без изменений. Если mode равен InvertRgba, инвертируются и биты альфа-канала.
Инвертирование 8-битного изображения означает замену всех пикселей с индексом цвета i на пиксели с индексом цвета 255 минус i. То же самое относится и к 1-битному изображению. Обратите внимание, что таблица цветов не изменяется.
END_OF_DOCUMENT_MARKERЕсли изображение имеет предварительно умноженный альфа-канал, изображение сначала преобразуется в формат изображения без предварительного умножения для инвертирования, а затем преобразуется обратно.
См. также Преобразования изображений.
bool QImage::isGrayscale() const
Для изображений 32-битного формата эта функция эквивалентна allGray().
Для изображений с индексированными цветами эта функция возвращает true, если цвет(i) равен QRgb(i, i, i) для всех индексов цветовой таблицы; в противном случае возвращает false.
См. также allGray() и Форматы изображений.
bool QImage::isNull() const
Возвращает true, если это изображение null, в противном случае возвращает false.
Изображение null имеет все параметры, установленные в ноль, и не содержит выделенных данных.
bool QImage::load(const QString &fileName, const char *format = nullptr)
Загружает изображение из файла с заданным именем fileName. Возвращает true, если изображение было успешно загружено; в противном случае делает изображение недействительным и возвращает false.
Загрузчик пытается прочитать изображение, используя указанный формат, например PNG или JPG. Если формат не указан (что является значением по умолчанию), он автоматически определяется на основе суффикса и заголовка файла. Подробности см. в QImageReader::setAutoDetectImageFormat().
Имя файла может ссылаться на фактический файл на диске или на один из встроенных ресурсов приложения. См. обзор Системы ресурсов, чтобы узнать, как встраивать изображения и другие файлы ресурсов в исполняемый файл приложения.
См. также Чтение и запись файлов изображений.
bool QImage::load(QIODevice *device, const char *format)
Это перегруженная функция.
Эта функция считывает QImage из указанного device. Это можно использовать, например, для загрузки изображения непосредственно в QByteArray.
bool QImage::loadFromData(const uchar *data, int len, const char *format = nullptr)
Загружает изображение из первых len байтов указанных двоичных данных data. Возвращает true, если изображение было успешно загружено; в противном случае делает изображение недействительным и возвращает false.
Загрузчик пытается прочитать изображение, используя указанный формат, например PNG или JPG. Если формат не указан (что является значением по умолчанию), загрузчик исследует файл на наличие заголовка, чтобы определить формат файла.
См. также Чтение и запись файлов изображений.
bool QImage::loadFromData(const QByteArray &data, const char *format = nullptr)
Это перегруженная функция.
Загружает изображение из указанного QByteArray data.
[since 6.0] void QImage::mirror(bool horizontal = false, bool vertical = true)
Отражает изображение по горизонтали и/или вертикали в зависимости от того, установлены ли horizontal и vertical в true или false.
Эта функция была введена в Qt 6.0.
См. также mirrored() и Преобразования изображений.
QPoint QImage::offset() const
Возвращает количество пикселей, на которое изображение должно быть смещено при позиционировании относительно других изображений.
См. также setOffset() и Информация об изображении.
QRgb QImage::pixel(const QPoint &position) const
Возвращает цвет пикселя в заданной position.
Если position недействительна, результаты не определены.
Предупреждение: Эта функция является дорогостоящей при использовании для массовой обработки пикселей. Используйте constBits() или constScanLine(), когда необходимо обработать много пикселей.
См. также setPixel(), valid(), constBits(), constScanLine(), и Обработка пикселей.
QRgb QImage::pixel(int x, int y) const
Это перегруженная функция.
Возвращает цвет пикселя в координатах (x, y).
[since 5.6] QColor QImage::pixelColor(const QPoint &position) const
Возвращает цвет пикселя в заданной position как QColor.
Если position недействительна, возвращается недействительный QColor.
Предупреждение: Эта функция является дорогостоящей при использовании для массовой обработки пикселей. Используйте constBits() или constScanLine(), когда необходимо обработать много пикселей.
Эта функция была введена в Qt 5.6.
См. также setPixelColor(), setPixel(), valid(), constBits(), constScanLine(), и Обработка пикселей.
[since 5.6] QColor QImage::pixelColor(int x, int y) const
Это перегруженная функция.
Возвращает цвет пикселя в координатах (x, y) как QColor.
Эта функция была введена в Qt 5.6.
QPixelFormat QImage::pixelFormat() const
Возвращает QImage::Format как QPixelFormat
int QImage::pixelIndex(const QPoint &position) const
Возвращает индекс пикселя в заданной position.
Если position недействительна, или если изображение не является палитровым изображением (depth() > 8), результаты не определены.
См. также valid(), depth(), и Обработка пикселей.
int QImage::pixelIndex(int x, int y) const
Это перегруженная функция.
Возвращает индекс пикселя в координатах (x, y).
QRect QImage::rect() const
Возвращает прямоугольник, охватывающий изображение (0, 0, width(), height()).
См. также Информация об изображении.
[since 5.9] bool QImage::reinterpretAsFormat(QImage::Format format)
Изменяет формат изображения на format без изменения данных. Действует только между форматами с одинаковой глубиной.
Возвращает true при успехе.
Эта функция может быть использована для изменения изображений с альфа-каналами на соответствующие непрозрачные форматы, если известно, что данные являются только непрозрачными, или для изменения формата заданного буфера изображения перед перезаписью его новыми данными.
Предупреждение: Функция не проверяет, являются ли данные изображения допустимыми в новом формате, и по-прежнему вернёт true, если глубины совместимы. Операции с изображением с недопустимыми данными не определены.
Предупреждение: Если изображение не отделено, это приведёт к копированию данных.
Эта функция была введена в Qt 5.9.
См. также hasAlphaChannel() и convertToFormat().
[since 6.0] void QImage::rgbSwap()
Меняет местами значения красного и синего компонентов всех пикселей, эффективно преобразуя RGB-изображение в BGR-изображение.
Эта функция была введена в Qt 6.0.
См. также rgbSwapped() и Преобразования изображений.
bool QImage::save(const QString &fileName, const char *format = nullptr, int quality = -1) const
Сохраняет изображение в файл с заданным именем fileName, используя заданный формат файла изображения format и коэффициент качества quality. Если format равен nullptr, QImage попытается определить формат, посмотрев на суффикс fileName.
Коэффициент quality должен быть в диапазоне от 0 до 100 или -1. Укажите 0 для получения небольших сжатых файлов, 100 для получения больших несжатых файлов и -1 (значение по умолчанию) для использования параметров по умолчанию.
Возвращает true, если изображение было успешно сохранено; в противном случае возвращает false.
См. также Чтение и запись файлов изображений.
bool QImage::save(QIODevice *device, const char *format = nullptr, int quality = -1) const
Это перегруженный метод.
Этот метод записывает QImage в указанное устройство.
Например, это можно использовать для сохранения изображения непосредственно в QByteArray:
QImage image; QByteArray ba; QBuffer buffer(&ba); buffer.open(QIODevice::WriteOnly); image.save(&buffer, "PNG"); // writes image into ba in PNG format
QImage QImage::scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const
Возвращает копию изображения, масштабированного до прямоугольника, заданного указанным size в соответствии с заданным aspectRatioMode и transformMode.
- Если aspectRatioMode равен Qt::IgnoreAspectRatio, изображение масштабируется до size.
- Если aspectRatioMode равен Qt::KeepAspectRatio, изображение масштабируется до максимально возможного прямоугольника внутри size, сохраняя соотношение сторон.
- Если aspectRatioMode равен Qt::KeepAspectRatioByExpanding, изображение масштабируется до минимально возможного прямоугольника вне size, сохраняя соотношение сторон.
Если заданный size пустой, этот метод возвращает пустое изображение.
См. также isNull() и Преобразования изображений.
QImage QImage::scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const
Это перегруженный метод.
Возвращает копию изображения, масштабированного до прямоугольника с заданной width и height в соответствии с заданным aspectRatioMode и transformMode.
Если width или height равны нулю или отрицательны, этот метод возвращает пустое изображение.
QImage QImage::scaledToHeight(int height, Qt::TransformationMode mode = Qt::FastTransformation) const
Возвращает масштабированную копию изображения. Возвращаемое изображение масштабируется до заданной height с использованием указанного режима преобразования mode.
Этот метод автоматически вычисляет ширину изображения таким образом, чтобы сохранялось соотношение сторон изображения.
Если заданная height равна 0 или отрицательна, возвращается пустое изображение.
См. также Преобразования изображений.
QImage QImage::scaledToWidth(int width, Qt::TransformationMode mode = Qt::FastTransformation) const
Возвращает масштабированную копию изображения. Возвращаемое изображение масштабируется до заданной width с использованием указанного режима преобразования mode.
Этот метод автоматически вычисляет высоту изображения, сохраняя его соотношение сторон.
Если заданная width равна 0 или отрицательна, возвращается пустое изображение.
См. также Преобразования изображений.
uchar *QImage::scanLine(int i)
Возвращает указатель на данные пикселей на строке сканирования с индексом i. Первая строка сканирования имеет индекс 0.
Данные строки сканирования выравниваются как минимум по 32 бита. Для 64-битовых форматов соблюдается родное выравнивание 64-битовых целых чисел (64 бита для большинства платформ, но, в частности, 32 бита на i386).
Например, чтобы удалить зелёный компонент каждого пикселя в изображении:
for (int y = 0; y < image.height(); ++y) {
QRgb *line = reinterpret_cast<QRgb*>(image.scanLine(y));
for (int x = 0; x < image.width(); ++x) {
QRgb &rgb = line[x];
rgb = qRgba(qRed(rgb), qGreen(0), qBlue(rgb), qAlpha(rgb));
}
} Предупреждение: Если вы обращаетесь к данным изображения 32 бита на пиксель, приведите возвращённый указатель к типу QRgb* (QRgb имеет размер 32 бита) и используйте его для чтения/записи значения пикселя. Вы не можете использовать указатель uchar* напрямую, потому что формат пикселя зависит от порядка байтов на платформе. Используйте qRed(), qGreen(), qBlue() и qAlpha() для доступа к пикселям.
См. также bytesPerLine(), bits(), Обработка пикселей и constScanLine().
const uchar *QImage::scanLine(int i) const
Это перегруженный метод.
void QImage::setAlphaChannel(const QImage &alphaChannel)
Устанавливает альфа-канал этого изображения в заданный alphaChannel.
Если alphaChannel - изображение альфа-канала 8 бит, значения альфа используются напрямую. В противном случае alphaChannel преобразуется в 8-битовое градацию серого, и интенсивность значений пикселей используется.
Если изображение уже имеет альфа-канал, существующий альфа-канал умножается на новый. Если изображение не имеет альфа-канала, оно будет преобразовано в формат, который его содержит.
Операция аналогична рисованию alphaChannel как изображения альфа-канала поверх этого изображения с использованием QPainter::CompositionMode_DestinationIn.
См. также hasAlphaChannel(), Преобразования изображений и Форматы изображений.
void QImage::setColor(int index, QRgb colorValue)
Устанавливает цвет по заданному index в таблице цветов в заданное значение colorValue. Значение цвета — четвёрка ARGB.
Если index выходит за текущий размер таблицы цветов, она расширяется с помощью setColorCount().
См. также color(), colorCount(), setColorTable() и Обработка пикселей.
void QImage::setColorCount(int colorCount)
Изменяет размер таблицы цветов на colorCount записей.
Если таблица цветов расширяется, все дополнительные цвета устанавливаются в прозрачный цвет (т. е. qRgba(0, 0, 0, 0)).
При использовании изображения таблица цветов должна быть достаточно большой, чтобы содержать записи для всех значений пикселей/индексов, присутствующих в изображении, иначе результаты неопределённы.
См. также colorCount(), colorTable(), setColor() и Преобразования изображений.
[since 5.14] void QImage::setColorSpace(const QColorSpace &colorSpace)
Устанавливает цветовое пространство изображения на colorSpace без выполнения каких-либо преобразований данных изображения.
Этот метод был представлен в Qt 5.14.
См. также colorSpace().
void QImage::setColorTable(const QList<QRgb> &colors)
Устанавливает таблицу цветов, используемую для преобразования индексов цветов в значения QRgb, на указанные colors.
При использовании изображения таблица цветов должна быть достаточно большой, чтобы содержать записи для всех значений пикселей/индексов, присутствующих в изображении, иначе результаты неопределённы.
См. также colorTable(), setColor() и Преобразования изображений.
void QImage::setDevicePixelRatio(qreal scaleFactor)
Устанавливает коэффициент пикселей устройства для изображения. Это отношение между пикселями изображения и независимыми от устройства пикселями.
Значение по умолчанию scaleFactor равно 1.0. Установка другого значения имеет два эффекта:
QPainters, открытые на изображении, будут масштабированы. Например, отрисовка на изображении 200x200 при коэффициенте 2.0 приведёт к эффективным (независимым от устройства) границам отрисовки 100x100.
Пути кода в Qt, вычисляющие геометрию макета на основе размера изображения, учтут коэффициент: QSize layoutSize = image.size() / image.devicePixelRatio() Конечный эффект заключается в том, что изображение отображается как изображение с высокой DPI, а не как большое изображение (см. Отрисовка высококачественных версий растровых изображений и картинок).
См. также devicePixelRatio().
void QImage::setDotsPerMeterX(int x)
Устанавливает количество пикселей, помещаемых по горизонтали в физический метр, на x.
Вместе с dotsPerMeterY() это число определяет предполагаемый масштаб и соотношение сторон изображения и определяет масштаб, на котором QPainter будет отрисовывать графику на изображении. Это не изменяет масштаб или соотношение сторон изображения при отрисовке на других устройствах отрисовки.
См. также dotsPerMeterX() и Сведения об изображении.
void QImage::setDotsPerMeterY(int y)
Устанавливает количество пикселей, помещаемых по вертикали в физический метр, на y.
Вместе с dotsPerMeterX() это число определяет предполагаемый масштаб и соотношение сторон изображения и определяет масштаб, на котором QPainter будет отрисовывать графику на изображении. Это не изменяет масштаб или соотношение сторон изображения при отрисовке на других устройствах отрисовки.
См. также dotsPerMeterY() и Сведения об изображении.
void QImage::setOffset(const QPoint &смещение)
Устанавливает количество пикселей, на которое изображение должно быть смещено при позиционировании относительно других изображений, в смещение.
См. также offset() и Информация об изображении.
void QImage::setPixel(const QPoint &позиция, uint индекс_или_rgb)
Устанавливает индекс пикселя или цвет в заданной позиции в индекс_или_rgb.
Если формат изображения монохромный или палитровый, заданное значение индекс_или_rgb должно быть индексом в таблице цветов изображения; в противном случае параметр должен быть значением QRgb.
Если позиция не является допустимой парой координат в изображении или если индекс_или_rgb >= colorCount() в случае монохромных и палитровых изображений, результат неопределён.
Предупреждение: Эта функция дорогостоящая из-за вызова внутренней функции detach(), вызываемой внутри; если производительность имеет значение, рекомендуется использовать scanLine() или bits() для прямого доступа к данным пикселей.
См. также pixel() и Обработка пикселей.
void QImage::setPixel(int x, int y, uint индекс_или_rgb)
Это перегруженная функция.
Устанавливает индекс пикселя или цвет в точке (x, y) в индекс_или_rgb.
[since 5.6] void QImage::setPixelColor(const QPoint &позиция, const QColor &цвет)
Устанавливает цвет в заданной позиции на цвет.
Если позиция не является допустимой парой координат в изображении или формат изображения монохромный или палитровый, результат неопределён.
Предупреждение: Эта функция дорогостоящая из-за вызова внутренней функции detach(), вызываемой внутри; если производительность имеет значение, рекомендуется использовать scanLine() или bits() для прямого доступа к данным пикселей.
Эта функция была добавлена в Qt 5.6.
См. также pixelColor(), pixel(), bits(), scanLine() и Обработка пикселей.
[since 5.6] void QImage::setPixelColor(int x, int y, const QColor &цвет)
Это перегруженная функция.
Устанавливает цвет пикселя в (x, y) на цвет.
Эта функция была добавлена в Qt 5.6.
void QImage::setText(const QString &ключ, const QString &текст)
Устанавливает текст изображения на заданный текст и связывает его с заданным ключом.
Если требуется сохранить только один блок текста (например, «комментарий» или просто описание), можно передать пустой ключ или использовать универсальный ключ, например, «Описание».
Текст изображения встраивается в данные изображения при вызове save() или QImageWriter::write().
Не все форматы изображений поддерживают встроенный текст. Вы можете узнать, поддерживает ли конкретное изображение или формат встраивание текста, используя QImageWriter::supportsOption(). Пример:
QImageWriter writer;
writer.setFormat("png");
if (writer.supportsOption(QImageIOHandler::Description))
qDebug() << "Png supports embedded text"; Вы можете использовать QImageWriter::supportedImageFormats(), чтобы узнать, какие форматы изображений доступны.
См. также text() и textKeys().
QSize QImage::size() const
Возвращает размер изображения, т. е. его ширину() и высоту().
См. также Информация об изображении.
[since 5.10] qsizetype QImage::sizeInBytes() const
Возвращает размер данных изображения в байтах.
Эта функция была добавлена в Qt 5.10.
См. также bytesPerLine(), bits() и Информация об изображении.
void QImage::swap(QImage &other)
Меняет местами изображение other с этим изображением. Эта операция очень быстрая и никогда не завершается неудачей.
QString QImage::text(const QString &ключ = QString()) const
Возвращает текст изображения, связанный с заданным ключом. Если указанный ключ — пустая строка, возвращается весь текст изображения, где каждая пара ключ-текст разделена новой строкой.
См. также setText() и textKeys().
QStringList QImage::textKeys() const
Возвращает ключи текста для этого изображения.
Вы можете использовать эти ключи с text() для перечисления текста изображения для определённого ключа.
См. также text().
CGImageRef QImage::toCGImage() const
Создаёт CGImage эквивалент этого QImage.
Возвращает CGImageRef дескриптор.
Возвращённый CGImageRef участвует в неявном совместном использовании QImage и содержит ссылку на данные QImage. CGImage является неизменяемым и никогда не отсоединит QImage. Запись в QImage отсоединит её как обычно.
Эта функция быстрая и не копирует и не преобразует данные изображения.
Поддерживаются следующие форматы изображений, которые будут сопоставлены с соответствующим родным типом изображения:
| Qt | CoreGraphics |
|---|---|
| Format_ARGB32 | kCGImageAlphaFirst | kCGBitmapByteOrder32Host |
| Format_RGB32 | kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Host |
| Format_RGBA8888_Premultiplied | kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big |
| Format_RGBA8888 | kCGImageAlphaLast | kCGBitmapByteOrder32Big |
| Format_RGBX8888 | kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder32Big |
| Format_ARGB32_Premultiplied | kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host |
Другие форматы не поддерживаются; эта функция возвращает нулевой CGImageRef для этих случаев. Пользователи этой функции могут предварительно преобразовать QImage в поддерживаемый формат, например, Format_ARGB32_Premultiplied.
Цветовое пространство CGImageRef устанавливается в цветовое пространство sRGB.
[since 6.0] HBITMAP QImage::toHBITMAP() const
Создаёт HBITMAP эквивалент QImage.
Возвращает HBITMAP дескриптор.
Ответственность за освобождение HBITMAP данных после использования лежит на вызывающей стороне.
Для использования со стандартными вызовами GDI, такими как BitBlt(), изображение должно иметь формат QImage::Format_RGB32.
При использовании полученного HBITMAP для функции GDI AlphaBlend(), изображение должно иметь формат QImage::Format_ARGB32_Premultiplied (используйте convertToFormat()).
При использовании полученного HBITMAP в качестве значка приложения или значка области уведомлений изображение должно иметь формат QImage::Format_ARGB32.
Эта функция была добавлена в Qt 6.0.
См. также fromHBITMAP() и convertToFormat().
[since 6.0] HICON QImage::toHICON(const QImage &маска = {}) const
Создаёт HICON эквивалент QPixmap, применяя маску маска.
Если маска не нулевая, она должна иметь формат QImage::Format_Mono. Возвращает HICON дескриптор.
Ответственность за освобождение HICON данных после использования лежит на вызывающей стороне.
Эта функция была добавлена в Qt 6.0.
См. также fromHICON().
[static] QImage::Format QImage::toImageFormat(QPixelFormat формат)
Преобразует формат в QImage::Format
[static] QPixelFormat QImage::toPixelFormat(QImage::Format формат)
Преобразует формат в QPixelFormat
QImage QImage::transformed(const QTransform &матрица, Qt::TransformationMode режим = Qt::FastTransformation) const
Возвращает копию изображения, преобразованного с помощью заданной трансформации матрица и режима трансформации режим.
Возвращаемое изображение, как правило, будет иметь тот же {Image Formats}{формат} что и исходное изображение. Однако сложное преобразование может привести к изображению, где не все пиксели покрыты преобразованными пикселями исходного изображения. В таких случаях эти фоновые пиксели будут назначены прозрачному цветовому значению, а преобразованному изображению будет присвоен формат с альфа-каналом, даже если исходное изображение его не имело.
Матрица преобразования matrix внутренне корректируется для компенсации нежелательного сдвига; т.е. полученное изображение — это наименьшее изображение, содержащее все преобразованные точки исходного изображения. Используйте функцию trueMatrix() для получения фактической матрицы, используемой для преобразования изображения.
В отличие от других перегрузок, эта функция может быть использована для выполнения перспективных преобразований изображений.
См. также trueMatrix() и Преобразования изображений.
[static] QTransform QImage::trueMatrix(const QTransform &matrix, int width, int height)
Возвращает фактическую матрицу, используемую для преобразования изображения с заданной шириной, высотой и матрицей.
При преобразовании изображения с помощью функции transformed(), матрица преобразования внутренне корректируется для компенсации нежелательного сдвига, т.е. transformed() возвращает наименьшее изображение, содержащее все преобразованные точки исходного изображения. Эта функция возвращает изменённую матрицу, которая правильно отображает точки из исходного изображения в новое изображение.
В отличие от других перегрузок, эта функция создаёт матрицы преобразований, которые могут быть использованы для выполнения перспективных преобразований изображений.
См. также transformed() и Преобразования изображений.
bool QImage::valid(const QPoint &pos) const
Возвращает true , если pos является допустимой парой координат внутри изображения; в противном случае возвращает false.
См. также rect() и QRect::contains().
bool QImage::valid(int x, int y) const
Это перегруженная функция.
Возвращает true , если QPoint(x, y) является допустимой парой координат внутри изображения; в противном случае возвращает false.
int QImage::width() const
Возвращает ширину изображения.
См. также Информация об изображении.
QVariant QImage::operator QVariant() const
Возвращает изображение как QVariant.
bool QImage::operator!=(const QImage &image) const
Возвращает true если у этого изображения и заданного image разное содержимое; в противном случае возвращает false.
Сравнение может быть медленным, если нет очевидных различий, таких как разные ширины, в этом случае функция вернёт результат быстро.
См. также operator=().
bool QImage::operator==(const QImage &image) const
Возвращает true если у этого изображения и заданного image одинаковое содержимое; в противном случае возвращает false.
Сравнение может быть медленным, если нет очевидных различий (например, разный размер или формат), в этом случае функция вернёт результат быстро.
См. также operator=().
Связанные нечлены
[since 5.0] QImageCleanupFunction
Функция с подписью, которая может быть использована для реализации базового управления памятью изображения:
void myImageCleanupHandler(void *info);
Этот typedef был добавлен в Qt 5.0.
QDataStream &operator<<(QDataStream &stream, const QImage &image)
Записывает заданное изображение в заданный поток как изображение PNG или как BMP-изображение, если версия потока равна 1. Обратите внимание, что запись потока в файл не создаст действительный файл изображения.
См. также QImage::save() и Сериализация типов данных Qt.
QDataStream &operator>>(QDataStream &stream, QImage &image)
Считывает изображение из заданного потока и сохраняет его в заданное изображение.
См. также QImage::load() и Сериализация типов данных Qt.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qimage.html