[英]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.