【发布时间】:2011-10-04 01:38:42
【问题描述】:
我想用 0xFF0000 (RGB) 之类的颜色制作,一种带有 FF alpha 的 RGBA 颜色,例如 0xFF0000FF。我想这将是一些带有比特的东西。
提前致谢, 卡佩尔
【问题讨论】:
-
@Christoffer,看看他的标签。我假设他想要在 C 中使用它。我确实建议添加更多描述,但无论如何,我几乎不赞成这个问题,直到我看到 C 标记
我想用 0xFF0000 (RGB) 之类的颜色制作,一种带有 FF alpha 的 RGBA 颜色,例如 0xFF0000FF。我想这将是一些带有比特的东西。
提前致谢, 卡佩尔
【问题讨论】:
uint32_t rgb=0xFF0000;
uint32_t rgba = (rgb << 8) | 0xFF;
解释: (rgb << 8) 将 rgb 值左移 8 位。这意味着它恰好向左移动一个字节,例如0x12345678 将更改为0x34567800。前两位数字在移位后不适合 32 位,因此它们被删除。其他所有东西都向左移动,然后在低位添加新的零。
下一个运算符是按位的or。它是一个 or 应用于每一位所以0x34567800 | 0xFF 将导致0x345678FF
(感谢@Gajet 的解释)
【讨论】:
(rgb << 8) 将 rgb 值移动 8 位。这意味着它恰好向左移动一个字节,因此例如0x12345678 将更改为0x34567800。前两个大数字被删除,每一个移位,然后在低位添加新的零。下一个运算符是bitwise or。这是一个or 应用于每个位,所以0x34567800 | 0xff 将导致0x345678ff
uint_least32_t,或者如果你知道你正在使用32位整数的平台上使用unsigned int