【问题标题】:Bit operation: inverse argb ignoring alpha位操作:忽略 alpha 的逆 argb
【发布时间】: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


【解决方案1】:

您可以使用xor mask

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

return argb ^ 0x00FFFFFF;

【讨论】:

    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    相关资源
    最近更新 更多