QPixelFormat 类

QPixelFormat 是一个用于描述图形缓冲区中不同像素布局的类。 更多...

头文件 #include <QPixelFormat>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui

公共类型

枚举AlphaPosition { AtBeginning, AtEnd }}
枚举AlphaPremultiplied { NotPremultiplied, Premultiplied }}
枚举AlphaUsage { IgnoresAlpha, UsesAlpha }}
枚举ByteOrder { LittleEndian, BigEndian, CurrentSystemEndian }}
枚举ColorModel { RGB, BGR, Indexed, Grayscale, CMYK, …, Alpha }}
枚举TypeInterpretation { UnsignedInteger, UnsignedShort, UnsignedByte, FloatingPoint }}
枚举YUVLayout { YUV444, YUV422, YUV411, YUV420P, YUV420SP, …, Y16 }}

公共函数

QPixelFormat()
QPixelFormat(QPixelFormat::ColorModel colorModel, uchar firstSize, uchar secondSize, uchar thirdSize, uchar fourthSize, uchar fifthSize, uchar alphaSize, QPixelFormat::AlphaUsage alphaUsage, QPixelFormat::AlphaPosition alphaPosition, QPixelFormat::AlphaPremultiplied premultiplied, QPixelFormat::TypeInterpretation typeInterpretation, QPixelFormat::ByteOrder byteOrder = CurrentSystemEndian, uchar subEnum = 0)
QPixelFormat::AlphaPositionalphaPosition() const
ucharalphaSize() const
QPixelFormat::AlphaUsagealphaUsage() const
ucharbitsPerPixel() const
ucharblackSize() const
ucharblueSize() const
ucharbrightnessSize() const
QPixelFormat::ByteOrderbyteOrder() const
ucharchannelCount() const
QPixelFormat::ColorModelcolorModel() const
ucharcyanSize() const
uchargreenSize() const
ucharhueSize() const
ucharlightnessSize() const
ucharmagentaSize() const
QPixelFormat::AlphaPremultipliedpremultiplied() const
ucharredSize() const
ucharsaturationSize() const
QPixelFormat::TypeInterpretationtypeInterpretation() const
ucharyellowSize() const
QPixelFormat::YUVLayoutyuvLayout() const
QPixelFormatqPixelFormatAlpha(uchar channelSize, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)
QPixelFormatqPixelFormatCmyk(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)
QPixelFormatqPixelFormatGrayscale(uchar channelSize, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)
QPixelFormatqPixelFormatHsl(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint)
QPixelFormatqPixelFormatHsv(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint)
QPixelFormatqPixelFormatRgba(uchar redSize, uchar greenSize, uchar blueSize, uchar alphaSize, QPixelFormat::AlphaUsage alphaUsage, QPixelFormat::AlphaPosition alphaPosition, QPixelFormat::AlphaPremultiplied premultiplied = QPixelFormat::NotPremultiplied, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)
QPixelFormatqPixelFormatYuv(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)

详细描述

在 Qt 中,经常需要表示图形缓冲区中像素的布局。内部 QPixelFormat 使用 64 位数据结构来存储所有内容。这提供了性能,但也带来了一些限制。

QPixelFormat 可以描述 5 个颜色通道和 1 个 Alpha 通道,每个颜色通道都可以使用 6 位来描述其大小。

Alpha 通道的位置使用一个独立的枚举类型进行描述,这使得描述像 ARGB32 这样的 QImage 格式成为可能,也可以描述典型的 OpenGL 格式,如 RBGA8888。

如何读取像素由 TypeInterpretation 枚举类型决定。它描述了是否逐字节读取颜色值,或者是否将像素作为一个完整的 int 读取并掩码。

不支持描述 YUV 的宏像素。相反,已经制定了一个 YUV 格式列表。当 QPixelFormat 描述 YUV 格式时,bitsPerPixel 的值通过 YUV Layout 枚举推导得出。此外,所有颜色通道都应该设置为 0,除了第五个颜色通道应该存储 bitsPerPixel 的值。

另请参阅 TypeInterpretation

成员类型文档

枚举 QPixelFormat::AlphaPosition

此枚举类型用于描述 Alpha 通道相对于颜色通道的位置。

常量描述
QPixelFormat::AtBeginning0Alpha 通道将被放置在颜色通道之前。例如 ARGB。
QPixelFormat::AtEnd1Alpha 通道将被放置在颜色通道之后。例如 RGBA。

枚举 QPixelFormat::AlphaPremultiplied

此枚举类型描述了 alpha 通道是否乘以颜色通道的状态。

常量描述
QPixelFormat::NotPremultiplied0alpha 通道未乘以颜色通道。
QPixelFormat::Premultiplied1alpha 通道乘以颜色通道。

枚举 QPixelFormat::AlphaUsage

此枚举描述了 alpha 通道是否使用。有时像素格式会有 alpha 通道的大小,但实际上并不使用 alpha 通道。例如 RGB32 就是这样的一种格式。RGB 通道各用 8 位,没有 alpha 通道。但每个像素的完整大小是 32。因此 alpha 通道的大小是 8,但 alpha 通道被忽略。需要注意的是,在这种情况下 alpha 通道的位置很重要。

常量描述
QPixelFormat::IgnoresAlpha1alpha 通道未使用。
QPixelFormat::UsesAlpha0alpha 通道被使用。

枚举 QPixelFormat::ByteOrder

此枚举描述了像素格式的字节序。此枚举通常被忽略,但在 YUV 格式中有一些用例。BGR 格式有自己的颜色模型,不应使用 RGB 格式的相反端序来描述。

常量描述
QPixelFormat::LittleEndian0字序为小端。
QPixelFormat::BigEndian1字序为大端。
QPixelFormat::CurrentSystemEndian2此枚举将不会被存储,但在构造函数中将其转换为与当前系统枚举匹配的字节序枚举。

枚举 QPixelFormat::ColorModel

此枚举类型用于描述像素格式的颜色模型。Alpha 是在 5.5 中添加的。

常量描述
QPixelFormat::RGB0颜色模型为 RGB。
QPixelFormat::BGR1这是 RGB 的逻辑上相反的字节序版本。然而,为了便于使用,它有自己的模型。
QPixelFormat::Indexed2颜色模型使用颜色调色板。
QPixelFormat::Grayscale3颜色模型为灰度。
QPixelFormat::CMYK4颜色模型为 CMYK。
QPixelFormat::HSL5颜色模型为 HSL。
QPixelFormat::HSV6颜色模型为 HSV。
QPixelFormat::YUV7颜色模型为 YUV。
QPixelFormat::Alpha8没有颜色模型,只使用 alpha。

枚举 QPixelFormat::TypeInterpretation

此枚举描述了如何解释每个像素。如果将像素读取为完整的 32 位无符号整数,然后对每个通道进行掩码,或者如果将每个字节读取为无符号 char 值。通常 QImage 格式将一个像素解释为无符号整数,然后对颜色通道进行掩码。另一方面,OpenGL 通常将像素“逐字节”解释,即无符号字节。

QImage 也有 Format_RGBA8888(及其衍生物)格式,其中像素被解释为无符号字节。OpenGL 有扩展,使得可以以无符号整数格式上传像素缓冲区。

An unsigned integer ARGB32 pixel.

上面的图像显示了在内存中按无符号整数读取的 ARGB 像素。然而,如果在这个小端系统中按字节逐个读取此像素,第一个字节将是包含 B 通道的字节。下一个字节是 G 通道,然后是 R 通道,最后是 A 通道。这表明在小端系统中,整数格式中每个像素的解释很重要。这在大端系统中不是这样。

常量
QPixelFormat::UnsignedInteger0
QPixelFormat::UnsignedShort1
QPixelFormat::UnsignedByte2
QPixelFormat::FloatingPoint3

枚举 QPixelFormat::YUVLayout

YUV不是通过描述颜色通道的大小来表示的。这是因为YUV经常使用宏像素,使得单独的颜色通道的概念无效。相反,使用这个枚举来描述不同的YUV布局。

常量
QPixelFormat::YUV4440
QPixelFormat::YUV4221
QPixelFormat::YUV4112
QPixelFormat::YUV420P3
QPixelFormat::YUV420SP4
QPixelFormat::YV125
QPixelFormat::UYVY6
QPixelFormat::YUYV7
QPixelFormat::NV128
QPixelFormat::NV219
QPixelFormat::IMC110
QPixelFormat::IMC211
QPixelFormat::IMC312
QPixelFormat::IMC413
QPixelFormat::Y814
QPixelFormat::Y1615

成员函数文档

[constexpr noexcept] QPixelFormat::QPixelFormat()

创建一个空的像素格式。此格式映射到QImage::Format_Invalid

[constexpr noexcept] QPixelFormat::QPixelFormat(QPixelFormat::ColorModel colorModel, uchar firstSize, uchar secondSize, uchar thirdSize, uchar fourthSize, uchar fifthSize, uchar alphaSize, QPixelFormat::AlphaUsage alphaUsage, QPixelFormat::AlphaPosition alphaPosition, QPixelFormat::AlphaPremultiplied premultiplied, QPixelFormat::TypeInterpretation typeInterpretation, QPixelFormat::ByteOrder byteOrder = CurrentSystemEndian, uchar subEnum = 0)

创建一个QPixelFormat,其数据分配给属性。将colorModel放入一个长度为4位的缓冲区中。

firstSize secondSize thirdSize fourthSize fifthSize alphaSize都代表通道的大小。通道将根据colorModel的不同用途进行使用。对于RGB,firstSize将代表红色通道。在CMYK上,它将代表青色通道的值。

alphaUsage表示是否使用alpha通道。

alphaPosition是alpha通道的位置。

premultiplied表示alpha通道是否已经与颜色通道相乘。

typeInterpretation表示如何解释像素。

byteOrder表示像素格式的字节顺序。默认为CurrentSystemEndian

subEnum用于需要存储额外信息并使用额外枚举的颜色模型。这与YUV一起使用以存储YUV类型。默认值是0。

[constexpr noexcept] QPixelFormat::AlphaPosition QPixelFormat::alphaPosition() const

alphaPosition的访问器函数。

[constexpr noexcept] uchar QPixelFormat::alphaSize() const

alpha通道大小的访问器函数。

[constexpr noexcept] QPixelFormat::AlphaUsage QPixelFormat::alphaUsage() const

alphaUsage属性的获取器函数。

[constexpr noexcept] uchar QPixelFormat::bitsPerPixel() const

像素每个像素所用位数的获取器函数。此函数返回颜色通道的总数加上alpha通道的大小。

[constexpr noexcept] uchar QPixelFormat::blackSize() const

黑色/关键颜色通道的获取器函数。

[constexpr noexcept] uchar QPixelFormat::blueSize() const

蓝色颜色通道大小的获取器函数。

[constexpr noexcept] uchar QPixelFormat::brightnessSize() const

亮度通道大小的获取器函数。

[constexpr noexcept] QPixelFormat::ByteOrder QPixelFormat::byteOrder() const

字节序几乎总是设置为当前系统的字节序。然而,在描述一些YUV格式时这可能很有用。此函数永远不会返回QPixelFormat::CurrentSystemEndian,因为此值在构造函数中被转换为字节序值。

[constexpr noexcept] uchar QPixelFormat::channelCount() const

获取channelCount属性的获取器函数。通道数是通过具有大于0大小的颜色通道推断出来的,如果alpha通道的大小大于0,也将计在内。

[constexpr noexcept] QPixelFormat::ColorModel QPixelFormat::colorModel() const

获取colorModel属性的获取器函数。

[constexpr noexcept] uchar QPixelFormat::cyanSize() const

青色颜色通道的获取器函数。

[constexpr noexcept] uchar QPixelFormat::greenSize() const

绿色颜色通道大小的获取器函数。

[constexpr noexcept] uchar QPixelFormat::hueSize() const

色调通道大小的获取器函数。

[constexpr noexcept] uchar QPixelFormat::lightnessSize() const

亮度通道大小的获取器函数。

[constexpr noexcept] uchar QPixelFormat::magentaSize() const

品红色颜色通道的获取器函数。

[constexpr noexcept] QPixelFormat::AlphaPremultiplied QPixelFormat::premultiplied() const

访问器函数,用于获取AlphaPremultiplied枚举。这表示是否将alpha通道乘到颜色通道中。

[constexpr noexcept] uchar QPixelFormat::redSize() const

访问器函数,用于获取红色颜色通道的大小。

[constexpr noexcept] uchar QPixelFormat::saturationSize() const

访问器函数,用于获取饱和度通道的大小。

[constexpr noexcept] QPixelFormat::TypeInterpretation QPixelFormat::typeInterpretation() const

访问器函数,用于获取颜色通道或像素的类型表示。

另请参阅 TypeInterpretation

[constexpr noexcept] uchar QPixelFormat::yellowSize() const

访问器函数,用于获取黄色颜色通道。

[constexpr noexcept] QPixelFormat::YUVLayout QPixelFormat::yuvLayout() const

访问器函数,用于获取YUVLayout。由于YUV色彩模型使用宏像素,难以描述YUV像素格式的颜色通道。因此,像素的布局存储为一个枚举。

相关非成员

[constexpr noexcept] QPixelFormat qPixelFormatAlpha(uchar channelSize, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)

创建Alpha格式的构造函数。可以通过将1传递给channelSize来描述掩码格式。如果通过将8传递给channelSize并将typeInterpretation设置为FloatingPoint,还可以定义非常精确的alpha格式。

另请参阅QPixelFormat::TypeInterpretation

[constexpr noexcept] QPixelFormat qPixelFormatCmyk(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)

创建CMYK格式的构造函数。如果alphaSize大于零,则通道数将为4或5。CMYK颜色通道都将设置为channelSize的值。

alphaUsage alphaPositiontypeInterpretation都具有同名访问器可访问。

另请参阅QPixelFormat::TypeInterpretation

[constexpr noexcept] QPixelFormat qPixelFormatGrayscale(uchar channelSize, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)

构造函数用于创建灰度格式。可以通过将 channelSize 传递为 1 来描述单色格式。也可以通过将 channelSize 传递为 8 并将 typeInterpretation 传递为 FloatingPoint 来定义非常精确的灰度格式,其中使用浮点数描述每个像素。

另请参阅QPixelFormat::TypeInterpretation

[constexpr noexcept] QPixelFormat qPixelFormatHsl(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint)

构造函数用于创建 HSL 格式。通道计数将取决于是否将 alphaSize 传递为大于 0。

channelSize 将将 hueSize saturationSizelightnessSize 设置为相同的值。

alphaUsage alphaPositiontypeInterpretation都具有同名访问器可访问。

[constexpr noexcept] QPixelFormat qPixelFormatHsv(uchar channelSize, uchar alphaSize = 0, QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha, QPixelFormat::AlphaPosition alphaPosition = QPixelFormat::AtBeginning, QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::FloatingPoint)

构造函数用于创建 HSV 格式。通道计数将取决于是否将 alphaSize 传递为大于 0。

channelSize 将将 hueSize saturationSizebrightnessSize 设置为相同的值。

alphaUsage alphaPositiontypeInterpretation都具有同名访问器可访问。

[constexpr noexcept] 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描述alpha通道的大小,其位置由alphaPosition描述。 alphaUsage用于确定是否使用alpha通道。将alpha通道大小设置为8并将alphaUsage设置为IgnoresAlpha可以创建一个32位格式,其中rgb通道仅使用24位组合。

另请参阅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)

创建描述具有yuvLayout的YUV格式的QPixelFormat的构造函数。 alphaSize描述潜在alpha通道的大小,其位置由alphaPosition描述。 "第一" "第二" ".." "第五" 通道全部设置为0。 alphaUsage premultiplied typeInterpretationbyteOrder将与其他格式一样工作。

© 2024 Qt公司。本文档贡献的版权属于各自的所有者。本提供的文档是根据自由软件基金会发布的GNU自由文档许可协议版本1.3许可的。Qt及其相应标志是芬兰及/或世界上其他国家的商标,分别为Qt公司的商标和/或附属机构。所有其他商标均为相关所有者的财产。