java中通过按位与和右移提取argb颜色分量:alpha用(color & 0xff000000) >> 24,red用(color & 0x00ff0000) >> 16,green用(color & 0x0000ff00) >> 8,blue用color & 0x000000ff。

Java 中通过按位与(&)提取颜色值的 RGB 分量,核心在于理解 ARGB 或 RGB 整数的内存布局和掩码(mask)的配合使用。Android 和 Java AWT/Swing 中常用一个 int 表示 32 位颜色(如 0xFFAABBCC),其中每 8 位对应 Alpha、Red、Green、Blue。按位与的作用是“保留特定位,清零其余位”,配合右移即可精准提取。
颜色值的位布局(以 0xAARRGGBB 格式为例)
在 Android 中,Color 类使用的格式是 ARGB_8888:32 位整数,从高位到低位依次为:
- Bits 31–24:Alpha(透明度)
- Bits 23–16:Red
- Bits 15–8:Green
- Bits 7–0:Blue
例如:0xFFFF00FF 表示不透明(FF)、纯红(FF)、无绿(00)、纯蓝(FF)——即品红色。
用按位与 + 右移提取各分量
关键不是单独用 &,而是先用掩码(mask)保留目标字节,再右移到最低位:
-
提取 Red:`(color & 0x00FF0000) >> 16`
掩码0x00FF0000仅保留红字节(第 23–16 位),右移 16 位后,红值落在低 8 位(0–255 范围) -
提取 Green:`(color & 0x0000FF00) >> 8`
掩码0x0000FF00保留绿字节,右移 8 位 -
提取 Blue:`color & 0x000000FF`
蓝字节已在最低 8 位,直接与0xFF即可(等价于color & 0xFF) - 提取 Alpha:`(color & 0xFF000000) >> 24`
实际代码示例(Android 风格)
int color = 0xFF22CC99; // alpha=255, r=34, g=204, b=153
int alpha = (color & 0xFF000000) >> 24;
int red = (color & 0x00FF0000) >> 16;
int green = (color & 0x0000FF00) >> 8;
int blue = color & 0x000000FF;
// 结果:alpha=255, red=34, green=204, blue=153
注意事项
- 确保颜色值是 32 位有符号 int,但高位为 1(如
0xFFxxxxxx)时,Java 会解释为负数;不过按位与和右移对补码表示的负数仍正确工作(逻辑右移需用>>,但 Android 的Color提取方法内部用的就是>>,因为只关心低 8 位) - 若用的是 RGB(24 位,无 Alpha),可先转成 ARGB:
0xFF000000 | rgbValue,再统一处理 - 推荐复用系统工具类(如 Android 的
Color.red(color)、Color.blue(color)),它们底层正是上述位运算,更安全且可读性高
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











