簡體   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