如何比较rgb值,忽略alpha

时间:2017-10-17 18:36:16

标签: java colors bit-manipulation rgb

正如问题所说,我想使用他们的rgb值比较两种颜色,但我想忽略alpha。 我没有得到那些位移和位操作符,所以你能告诉我有没有比下面的代码更优雅的方法呢?

boolean compareRGB(Color c1, Color c2) {
    return c1.getRed() == c2.getRed() && c1.getGreen() == c2.getGreen() && c1.getBlue() == c2.getBlue();
}

1 个答案:

答案 0 :(得分:1)

如果你想要一个按位解决方案,它可能看起来像这样:

public static boolean equalsIgnoreAlpha(Color c1, Color c2) {
    return ((c1.getRGB() ^ c2.getRGB()) & 0x00_ff_ff_ff) == 0x00_00_00_00;
}

第一部分

    c1.getRGB() ^ c2.getRGB()

是独家或(或xor)。对于匹配的位,其结果为0,对于不同的位,其结果为1。如果整个整数匹配,则结果对于每个位只是零。因为我们不关心alpha位,所以步骤

(...) & 0x00_ff_ff_ff

是'和'所以如果两边都有1,结果只有1英寸。由于0x00_ff_ff_ff对于alpha通道位没有1,对于所有RGB位都没有1,因此这将仅保留RGB段的打开位。

最后,对于匹配,我们现在期望所有位都关闭,因此我们可以比较为0.