[英]Why does QColor use 32-bit signed int to represent e.g. rgba values?
QColor
可以返回int
类型(32 位有符号整数)的 rgba 值。 这是为什么? 颜色值的范围是 0-255,不是吗? 有没有可能不是这种情况的情况?
我正在考虑将QColor.red()/green()/blue()/alpha()
返回的每个 rgba 值隐式转换为quint8
。 它似乎有效,但我不知道在某些情况下这是否会导致问题。 有任何想法吗?
我假设您正在谈论返回QRgb
的QColor::rgba()
。
QRgb
是 unsigned int 的别名。 在这 32 位中,所有四个通道都编码为#AARRGGBB
,每个通道 8 位(如您所述,为 0-255)。 因此,像 alpha=32, red=255, blue=127, green=0 这样的颜色将是0x20FF7F00
(十进制为553615104
)。
现在,关于您关于转换为quint8
的问题,应该没有问题,因为每个通道都保证在 0..255 范围内( 参考)。 一般来说,Qt 通常使用int
作为一般的 integer,不要太注意数据类型的宽度,除非在某些特定情况下(例如,当需要给定 memory 访问时)。 所以,不用担心。
现在,如果这些操作在高性能上下文中频繁执行,请考虑使用QColor::rgba
一次检索 32 位,然后从中提取组件。 您可以使用按位运算或通过便捷函数qAlpha
、 qRed
、 qBlue
和qGreen
访问各个通道。
为了完整起见,仅提及同级QColor::rgb
方法返回相同的结构,但 alpha 通道是不透明的 (0xFF)。 您还有QColor::rgba64
,它返回QRgba64
。 它使用每个通道 16 位,以获得更高的精度。 你有 64 位等效于qAlpha
等,如qAlpha64
等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.