繁体   English   中英

为什么 QColor 使用 32 位有符号整数来表示例如 rgba 值?

[英]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 它似乎有效,但我不知道在某些情况下这是否会导致问题。 有任何想法吗?

我假设您正在谈论返回QRgbQColor::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 位,然后从中提取组件。 您可以使用按位运算或通过便捷函数qAlphaqRedqBlueqGreen访问各个通道。

为了完整起见,仅提及同级QColor::rgb方法返回相同的结构,但 alpha 通道是不透明的 (0xFF)。 您还有QColor::rgba64 ,它返回QRgba64 它使用每个通道 16 位,以获得更高的精度。 你有 64 位等效于qAlpha等,如qAlpha64等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM