位操作:反向argb忽略alpha

时间:2017-10-28 15:41:33

标签: 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();
}

现在我猜想如果你将红色,绿色和蓝色值作为8位bytes,你可以简单地用~运算符反转它们以获得相同的结果。<登记/> 但我无法反转整个argb代码,因为那也会反转alpha并且我希望alpha不受影响:

public int getInversed(int argb) {
    return ~argb;    //inverses alpha as well
}

那么如何用位操作反转argb代码,忽略alpha部分?

1 个答案:

答案 0 :(得分:5)

您可以使用xor mask

执行此操作
  

因此,通过使用1来对它们进行异或来完成位的值的反转   另请注意,XOR屏蔽是位安全的,这意味着它不会影响未屏蔽的位

return argb ^ 0x00FFFFFF;