【发布时间】:2018-04-10 00:43:06
【问题描述】:
我是位操作的新手,想用它做以下事情:
我的程序需要反色的 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 部分?
【问题讨论】:
-
最简单的方法就是屏蔽掉需要反转的部分:
mask = 0xFFFFFF; argb = (~argb & mask) | (argb & ~mask);
标签: java bit-manipulation argb