Duk*_*uke 2 java bit-manipulation argb
我是位操作的新手,想用它来做以下操作:
我需要为我的程序设置反转颜色的argb代码,如红色变为青色或白色变为黑色.尝试使用photoshop我发现你必须计算255 - 红色,255 - 绿色和255 - 蓝色.所以这看起来像这样:
int getInversed(int argb) {
Color old = new Color(argb);
Color negative = new Color(255 - old.getRed(), 255 - old.getGreen(), 255 - old.getBlue(), old.getAlpha());
return negative.getRGB();
}
Run Code Online (Sandbox Code Playgroud)
现在我猜想如果你将红色,绿色和蓝色值作为8位bytes,你可以简单地用~运算符反转它们以得到相同的结果.
但我无法反转整个argb代码,因为那也会反转alpha并且我希望alpha不受影响:
public int getInversed(int argb) {
return ~argb; //inverses alpha as well
}
Run Code Online (Sandbox Code Playgroud)
那么如何用位操作反转argb代码,忽略alpha部分呢?
你可以用xor mask做到这一点:
因此,通过将它们与1进行异或来完成位的值的反转.
还要注意,XOR屏蔽是位安全的,这意味着它不会影响未屏蔽的位.
return argb ^ 0x00FFFFFF;
Run Code Online (Sandbox Code Playgroud)