Java中如何修改十六进制ARGB整型的AA、RR等各分量数值?
操作原理
32位int型的0xAARRGGBB格式中,各分量占8位,位偏移量如下:
- Alpha分量(AA):偏移24位(最高8位,bit 24~31)
- 红色分量(RR):偏移16位(bit 16~23)
- 绿色分量(GG):偏移8位(bit 8~15)
- 蓝色分量(BB):偏移0位(最低8位,bit 0~7)
修改单个分量的通用步骤:
- 用掩码清除目标分量对应的8位数据
- 将新的分量值(需保证范围0~255)左移对应偏移量
- 用按位或运算把新值写入目标位置
代码示例
原始变量定义:
int argb = 0xAARRGGBB;
修改Alpha分量(AA)
// 新alpha值,取值范围0~255 int newAlpha = 0xCC; // 先清除原有alpha位(掩码0x00FFFFFF),再写入新的alpha值 argb = (argb & 0x00FFFFFF) | (newAlpha << 24);
修改红色分量(RR)
// 新红色值,取值范围0~255 int newRed = 0x33; // 先清除原有红色位(掩码0xFF00FFFF),再写入新的红色值 argb = (argb & 0xFF00FFFF) | (newRed << 16);
修改绿色分量(GG)
int newGreen = 0x44; argb = (argb & 0xFFFF00FF) | (newGreen << 8);
修改蓝色分量(BB)
int newBlue = 0x55; argb = (argb & 0xFFFFFF00) | newBlue;
注意事项
- 新的分量值必须保证在
0~255区间内,如果值可能超出范围,建议先做截断处理:newValue & 0xFF,避免高位数据污染其他分量 - 如果需要同时修改多个分量,可以合并掩码和位移操作,减少计算步骤
内容的提问来源于stack exchange,提问作者Day Trip
相关产品推荐
相关产品推荐

