这个位掩码(0xffffff 和颜色)到底是如何工作的?

How exactly does this bit masking (0xffffff & color) works?

最后我在这里问完了!

有一个可以接受的答案,可以从该站点的某处将 int 颜色转换为 HEX String

答案中有这行,我自己弄不清楚。

String.format("#%06X", (0xFFFFFF & anyColor));

我迷路了上面代码中 "bit masking" 这部分的位置。

这是我到目前为止学到的东西:

int 颜色是 32 位 int,其中包含 ARGB 信息。

那么在上面的"bit masking"过程中,Alpha通道是如何从RGB部分屏蔽掉的呢?

到目前为止我自己尝试过的是:

假设上面的 anyColor 具有 argb(250, 25, 50, 75) 的 ARGB 值。

对于RED频道,用上面的代码启动; 位掩码首先是这样完成的?

0000 0000 0000 0000 0000 0000 0001 1001

位掩码 0x0000ff

0000 0000 0000 0000 0000 0000 1111   1111

或者首先将 RED 通道从其原始 int 颜色值向左移动,然后像这样对其应用位掩码?

红色 << 16

0000 0000 0001 1001 0000 0000 0000 0000

然后是位掩码?

             F    F
0000 0000 1111 1111 0000 0000 0000 0000

或者,使用 0xFFFFFF 一次完成所有 RGB 通道的位屏蔽?

0000 0000 1111 1111 1111 1111 1111 1111

我想知道的是那里到底做了什么位掩码?任何很好的解释将不胜感激。谢谢。

OR, bit masking done all RGB channels at once with 0xFFFFFF?

0000 0000 1111 1111 1111 1111 1111 1111

没错。

ARGB 颜色以二进制编码,格式如下:

AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB

其中每个字母代表相应组件的一位。

有问题的掩码是 0xffffff,它是 8 位零后跟 24 位一:

0000 0000 1111 1111 1111 1111 1111 1111

通过执行掩码和 ARGB 颜色的按位 AND,创建 RGB 表示:

0000 0000 RRRR RRRR GGGG GGGG BBBB BBBB