Класс QPixelFormat
QPixelFormat — это класс для описания различных компоновок пикселей в графических буферах Подробнее...
| Заголовок: | #include <QPixelFormat> |
| qmake: | QT += gui |
| С версии: | Qt 5.4 |
Открытые типы
| enum | AlphaPosition { AtBeginning, AtEnd } |
| enum | AlphaPremultiplied { NotPremultiplied, Premultiplied } |
| enum | AlphaUsage { IgnoresAlpha, UsesAlpha } |
| enum | ByteOrder { LittleEndian, BigEndian, CurrentSystemEndian } |
| enum | ColorModel { RGB, BGR, Indexed, Grayscale, ..., Alpha } |
| enum | TypeInterpretation { UnsignedInteger, UnsignedShort, UnsignedByte, FloatingPoint } |
| enum | YUVLayout { YUV444, YUV422, YUV411, YUV420P, ..., Y16 } |
Открытые функции
| QPixelFormat() | |
| QPixelFormat(ColorModel colorModel, uchar firstSize, uchar secondSize, uchar thirdSize, uchar fourthSize, uchar fifthSize, uchar alphaSize, AlphaUsage alphaUsage, AlphaPosition alphaPosition, AlphaPremultiplied premultiplied, TypeInterpretation typeInterpretation, ByteOrder byteOrder = CurrentSystemEndian, uchar subEnum = 0) | |
| AlphaPosition | alphaPosition() const |
| uchar | alphaSize() const |
| AlphaUsage | alphaUsage() const |
| uchar | bitsPerPixel() const |
| uchar | blackSize() const |
| uchar | blueSize() const |
| uchar | brightnessSize() const |
| ByteOrder | byteOrder() const |
| uchar | channelCount() const |
| ColorModel | colorModel() const |
| uchar | cyanSize() const |
| uchar | greenSize() const |
| uchar | hueSize() const |
| uchar | lightnessSize() const |
| uchar | magentaSize() const |
| AlphaPremultiplied | premultiplied() const |
| uchar | redSize() const |
| uchar | saturationSize() const |
| TypeInterpretation | typeInterpretation() const |
| uchar | yellowSize() const |
| YUVLayout | yuvLayout() const |
Связанные внешние функции
| QPixelFormat | qPixelFormatAlpha(uchar channelSize, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger) |
| QPixelFormat | qPixelFormatCmyk(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger) |
| QPixelFormat | qPixelFormatGrayscale(uchar channelSize, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger) |
| QPixelFormat | qPixelFormatHsl(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint) |
| QPixelFormat | qPixelFormatHsv(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint) |
| QPixelFormat | qPixelFormatRgba(uchar redSize, uchar greenSize, uchar blueSize, uchar alphaSize, QPixelFormat::AlphaUsage alphaUsage, QPixelFormat::AlphaPosition alphaPosition, QPixelFormat::AlphaPremultiplied premultiplied = QPixelFormat::NotPremultiplied, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger) |
| QPixelFormat | qPixelFormatYuv(QPixelFormat::YUVLayout yuvLayout, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::AlphaPremultiplied premultiplied = QPixelFormat::NotPremultiplied, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedByte, QPixelFormat::ByteOrder byteOrder = QPixelFormat::LittleEndian) |
Подробное описание
QPixelFormat — это класс для описания различных компоновок пикселей в графических буферах
В Qt часто возникает необходимость представлять компоновку пикселей в графическом буфере. Внутренне QPixelFormat хранит все в 64-битной структуре данных. Это обеспечивает производительность, но также накладывает некоторые ограничения.
QPixelFormat может описывать 5 цветовых каналов и 1 альфа-канал, каждый из которых может использовать 6 бит для описания размера цветового канала.
Положение альфа-канала описывается отдельным перечислением. Это позволяет описывать форматы QImage, такие как ARGB32, а также типичные форматы OpenGL, такие как RBGA8888.
Способ чтения пикселей определяется перечислением TypeInterpretation. Оно описывает, следует ли читать значения цвета побайтово или же пиксель следует читать как целое число, а затем применять маску.
Нет поддержки описания макропикселей YUV. Вместо этого был создан список форматов YUV. Когда QPixelFormat описывает формат YUV, значение bitsPerPixel выводится из перечисления YUV Layout. Кроме того, все цветовые каналы должны быть установлены в ноль, за исключением пятого цветового канала, который должен хранить значение bitsPerPixel.
См. также TypeInterpretation.
Описание типов членов
enum QPixelFormat::AlphaPosition
Этот тип перечисления используется для описания расположения альфа-канала относительно каналов цвета.
| Постоянная | Значение | Описание |
|---|---|---|
QPixelFormat::AtBeginning |
0 |
Альфа-канал будет расположен перед каналами цвета. Например, ARGB. |
QPixelFormat::AtEnd |
1 |
Альфа-канал будет расположен позади каналов цвета. Например, RGBA. |
enum QPixelFormat::AlphaPremultiplied
Этот тип перечисления описывает булево состояние, умножается ли альфа-канал на каналы цвета или нет.
| Постоянная | Значение | Описание |
|---|---|---|
QPixelFormat::NotPremultiplied |
0 |
Альфа-канал не умножается на каналы цвета. |
QPixelFormat::Premultiplied |
1 |
Альфа-канал умножается на каналы цвета. |
enum QPixelFormat::AlphaUsage
Это перечисление описывает, используется ли альфа-канал или нет. Иногда пиксельный формат имеет размер для альфа-канала, но сам формат на самом деле не использует альфа-канал. Например, формат RGB32 — это такой формат. Канал RGB имеет по 8 бит каждый, и нет альфа-канала. Но полный размер каждого пикселя составляет 32. Поэтому размер альфа-канала равен 8, но сам альфа-канал игнорируется. Важно отметить, что в таких ситуациях важно расположение альфа-канала.
| Постоянная | Значение | Описание |
|---|---|---|
QPixelFormat::IgnoresAlpha |
1 |
Альфа-канал не используется. |
QPixelFormat::UsesAlpha |
0 |
Альфа-канал используется. |
enum QPixelFormat::ByteOrder
Это перечисление описывает порядок байтов пиксельного формата. Это перечисление в основном игнорируется, но имеет некоторые применения для форматов YUV. Форматы BGR имеют собственную модель цвета и не должны описываться с помощью обратного порядка байтов формата RGB.
| Постоянная | Значение | Описание |
|---|---|---|
QPixelFormat::LittleEndian |
0 |
Порядок байтов — little endian. |
QPixelFormat::BigEndian |
1 |
Порядок байтов — big endian. |
QPixelFormat::CurrentSystemEndian |
2 |
Это перечисление не будет сохранено, а будет преобразовано в конструкторе в перечисление порядка байтов, соответствующее текущей системе. |
enum QPixelFormat::ColorModel
Этот тип перечисления используется для описания модели цвета пиксельного формата. Альфа был добавлен в версии 5.5.
| Постоянная | Значение | Описание |
|---|---|---|
QPixelFormat::RGB |
0 |
Модель цвета — RGB. |
QPixelFormat::BGR |
1 |
Это логически обратный порядок байтов версии RGB. Однако для удобства использования у него есть собственная модель. |
QPixelFormat::Indexed |
2 |
Модель цвета использует цветовую палитру. |
QPixelFormat::Grayscale |
3 |
Модель цвета — Градации серого. |
QPixelFormat::CMYK |
4 |
Модель цвета — CMYK. |
QPixelFormat::HSL |
5 |
Модель цвета — HSL. |
QPixelFormat::HSV |
6 |
Модель цвета — HSV. |
QPixelFormat::YUV |
7 |
Модель цвета — YUV. |
QPixelFormat::Alpha |
8 |
Модель цвета отсутствует, используется только альфа-канал. |
enum QPixelFormat::TypeInterpretation
Это перечисление описывает, как интерпретируется каждый пиксель. Если пиксель читается как целое 32-битное беззнаковое число, а затем каждый канал маскируется, или если каждый байт читается как значения беззнакового char. Обычно форматы QImage интерпретируют один пиксель как беззнаковое целое число, а затем каналы цвета маскируются. OpenGL, с другой стороны, обычно интерпретирует пиксели «по одному байту», т. е. беззнаковые байты.
QImage также имеет формат Format_RGBA8888 (и его производные), где пиксели интерпретируются как беззнаковые байты. OpenGL имеет расширения, которые позволяют загружать буферы пикселей в формате беззнакового целого числа.
На рисунке показан пиксель ARGB в памяти, читаемый как беззнаковое целое число. Однако, если этот пиксель читался бы байт за байтом в системе little endian, первый байт содержал бы байт с каналом B. Следующий байт — канал G, затем R и, наконец, A. Это показывает, что в системах little endian то, как интерпретируется каждый пиксель, важно для целочисленных форматов. В системах big endian это не так.
| Постоянная | Значение |
|---|---|
QPixelFormat::UnsignedInteger |
0 |
QPixelFormat::UnsignedShort |
1 |
QPixelFormat::UnsignedByte |
2 |
QPixelFormat::FloatingPoint |
3 |
enum QPixelFormat::YUVLayout
YUV не представлен описанием размера каналов цвета. Это связано с тем, что YUV часто использует макропиксели, делая понятие отдельных каналов цвета недействительным. Вместо этого различные макеты YUV описываются с помощью этого перечисления.
| Постоянная | Значение |
|---|---|
QPixelFormat::YUV444 |
0 |
QPixelFormat::YUV422 |
1 |
QPixelFormat::YUV411 |
2 |
QPixelFormat::YUV420P |
3 |
QPixelFormat::YUV420SP |
4 |
QPixelFormat::YV12 |
5 |
QPixelFormat::UYVY |
6 |
QPixelFormat::YUYV |
7 |
QPixelFormat::NV12 |
8 |
QPixelFormat::NV21 |
9 |
QPixelFormat::IMC1 |
10 |
QPixelFormat::IMC2 |
11 |
QPixelFormat::IMC3 |
12 |
QPixelFormat::IMC4 |
13 |
QPixelFormat::Y8 |
14 |
QPixelFormat::Y16 |
15 |
Документация функций-членов
QPixelFormat::QPixelFormat()
Создает нулевой пиксельный формат. Этот формат отображается на QImage::Format_Invalid.
QPixelFormat::QPixelFormat(ColorModel colorModel, uchar firstSize, uchar secondSize, uchar thirdSize, uchar fourthSize, uchar fifthSize, uchar alphaSize, AlphaUsage alphaUsage, AlphaPosition alphaPosition, AlphaPremultiplied premultiplied, TypeInterpretation typeInterpretation, ByteOrder byteOrder = CurrentSystemEndian, uchar subEnum = 0)
Создаёт QPixelFormat, который назначает свои данные атрибутам. colorModel будет помещён в буфер длиной 4 бита.
firstSize, secondSize, thirdSize, fourthSize, fifthSize и alphaSize предназначены для представления размера канала. Каналы будут использоваться для различных целей в зависимости от colorModel. Для RGB firstSize будет представлять красный канал. Для CMYK он будет представлять значение канала голубого цвета.
alphaUsage обозначает, используется ли альфа-канал.
alphaPosition — позиция альфа-канала.
premultiplied обозначает, умножается ли альфа-канал на цветовые каналы.
typeInterpretation — способ интерпретации пикселя.
byteOrder представляет порядок байтов пиксельного формата. По умолчанию используется CurrentSystemEndian.
subEnum используется для цветовых моделей, которым необходимо хранить дополнительную информацию с помощью дополнительного перечисления. Используется в YUV для хранения типа YUV. Значение по умолчанию равно 0.
AlphaPosition QPixelFormat::alphaPosition() const
Функция-аксессор для alphaPosition.
uchar QPixelFormat::alphaSize() const
Функция-аксессор для размера альфа-канала.
AlphaUsage QPixelFormat::alphaUsage() const
Функция-аксессор для alphaUsage.
uchar QPixelFormat::bitsPerPixel() const
Функция-аксессор для битов на пиксель. Эта функция возвращает сумму цветовых каналов + размер альфа-канала.
uchar QPixelFormat::blackSize() const
Функция-аксессор для чёрно-ключевого цветового канала.
uchar QPixelFormat::blueSize() const
Функция-аксессор для размера синего цветового канала.
uchar QPixelFormat::brightnessSize() const
Функция-аксессор для размера канала яркости.
ByteOrder QPixelFormat::byteOrder() const
Порядок байтов почти всегда устанавливается в соответствии с порядком байтов текущей системы. Однако он может быть полезен для описания некоторых форматов YUV. Эта функция никогда не должна возвращать QPixelFormat::CurrentSystemEndian, так как это значение преобразуется в значение порядка байтов в конструкторе.
uchar QPixelFormat::channelCount() const
Функция-аксессор для получения channelCount. Количество каналов определяется по цветам с размером > 0 и если размер альфа-канала > 0.
ColorModel QPixelFormat::colorModel() const
Функция-аксессор для получения colorModel.
uchar QPixelFormat::cyanSize() const
Функция-аксессор для канала голубого цвета.
uchar QPixelFormat::greenSize() const
Функция-аксессор для размера зелёного цветового канала.
uchar QPixelFormat::hueSize() const
Функция-аксессор для размера канала оттенка.
uchar QPixelFormat::lightnessSize() const
Функция-аксессор для размера канала светлоты.
uchar QPixelFormat::magentaSize() const
Функция-аксессор для канала пурпурного цвета.
AlphaPremultiplied QPixelFormat::premultiplied() const
Функция-аксессор для перечисления AlphaPremultiplied. Указывает, умножается ли альфа-канал на цветовые каналы.
uchar QPixelFormat::redSize() const
Функция-аксессор для размера красного цветового канала.
uchar QPixelFormat::saturationSize() const
Функция-аксессор для размера канала насыщенности.
TypeInterpretation QPixelFormat::typeInterpretation() const
Функция-аксессор для типа представления цветового канала или пикселя.
См. также TypeInterpretation.
uchar QPixelFormat::yellowSize() const
Функция-аксессор для канала жёлтого цвета.
YUVLayout QPixelFormat::yuvLayout() const
Функция-аксессор для YUVLayout. Сложно описать цветовые каналы формата YUV, так как цветовая модель YUV использует макропиксели. Вместо этого макет пикселей хранится как перечисление.
Связанные нечлены
QPixelFormat qPixelFormatAlpha(uchar channelSize, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)
Функция-конструктор для создания формата Alpha. Формат маски можно описать, передав 1 в channelSize. Также возможно определить очень точные форматы альфа-каналов, используя double для описания каждого пикселя, передав 8 в channelSize и FloatingPoint в typeInterpretation.
Эта функция была добавлена в Qt 5.5.
См. также QPixelFormat::TypeInterpretation.
QPixelFormat qPixelFormatCmyk(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)
Функция-конструктор для создания форматов CMYK. Количество каналов будет 4 или 5, в зависимости от того, больше ли alphaSize нуля. Каналы цвета CMYK будут все установлены в значение channelSize.
alphaUsage, alphaPosition и typeInterpretation доступны через методы с одинаковыми именами.
См. также QPixelFormat::TypeInterpretation.
QPixelFormat qPixelFormatGrayscale(uchar channelSize, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)
Функция-конструктор для создания формата Grayscale. Монохромные форматы можно описать, передав 1 в channelSize. Также возможно определить очень точные форматы оттенков серого, используя double для описания каждого пикселя, передав 8 в channelSize и FloatingPoint в typeInterpretation.
См. также QPixelFormat::TypeInterpretation.
QPixelFormat qPixelFormatHsl(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint)
Функция-конструктор для создания форматов HSL. Количество каналов будет 3 или 4, в зависимости от того, больше ли alphaSize нуля.
channelSize установит hueSize, saturationSize и lightnessSize в одно и то же значение.
alphaUsage, alphaPosition и typeInterpretation доступны через методы с одинаковыми именами.
QPixelFormat qPixelFormatHsv(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint)
Функция-конструктор для создания форматов HSV. Количество каналов будет 3 или 4, в зависимости от того, больше ли alphaSize нуля.
channelSize установит hueSize, saturationSize и brightnessSize в одно и то же значение.
alphaUsage, alphaPosition и typeInterpretation доступны через методы с одинаковыми именами.
QPixelFormat qPixelFormatRgba(uchar redSize, uchar greenSize, uchar blueSize, uchar alphaSize, QPixelFormat::AlphaUsage alphaUsage, QPixelFormat::AlphaPosition alphaPosition, QPixelFormat::AlphaPremultiplied premultiplied = QPixelFormat::NotPremultiplied, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)
Функция-конструктор, создающая RGB формат пикселей. redSize, greenSize, blueSize представляют размер каждого цветового канала. alphaSize описывает размер альфа-канала, а его положение описывается alphaPosition. alphaUsage используется для определения использования альфа-канала. Установка размера альфа-канала в 8 и alphaUsage в IgnoresAlpha – способ создания 32-битного формата, где каналы rgb используют только 24 бита вместе.
premultiplied и typeInterpretation доступны через методы с одинаковыми именами.
См. также QPixelFormat::TypeInterpretation.
QPixelFormat qPixelFormatYuv(QPixelFormat::YUVLayout yuvLayout, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::AlphaPremultiplied premultiplied = QPixelFormat::NotPremultiplied, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedByte, QPixelFormat::ByteOrder byteOrder = QPixelFormat::LittleEndian)
Функция-конструктор для создания QPixelFormat, описывающего формат YUV с yuvLayout. alphaSize описывает размер потенциального альфа-канала, а его положение описывается alphaPosition. Каналы "first", "second" .. "fifth" все установлены в 0. alphaUsage, premultiplied, typeInterpretation и byteOrder работают так же, как и в других форматах.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qpixelformat.html