java - 如何比较 RGB 值,忽略 alpha

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

最佳答案

如果您想要一个按位解决方案,它可能如下所示:

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()

是异或(或异或)。对于匹配的位,其结果将为 0;对于不同的位,其结果将为 1。如果整个整数匹配,则每个位的结果将为零。由于我们不关心 alpha 位,因此步骤

(...) & 0x00_ff_ff_ff

是一个“与”,因此只有当两边都是 1 时,结果才会有一点 1。由于 0x00_ff_ff_ff 对于 alpha channel 位没有 1,对于所有 RGB 位都没有 1,因此这只会保留 RGB 部分打开的位。

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

关于java - 如何比较 RGB 值,忽略 alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46796988/

相关文章:

java - 如何删除 char 数组中的空白位置?

r - scale_fill_fermenter() 的自定义调色板

java Swing : Is it possible change color of a specific string variable?

javascript - 按位运算 - 零填充右移(>>>)用法?

Java8 代码停止编译并让我进行不必要的显式转换

java - JButton 的 ActionListener

c++ - 将位从一个数组转换为另一个数组?

algorithm - 二进制数比较

java - 从表中的 JPanel 类返回 JTable

java - 将 JTextField 的 »disabledTextColor« 设置为红色并将其禁用并将 »enabled« 设置为 false,但它仍然显示为灰色