【问题标题】:Any one tell me why we write this 0xff000000 in filters?有人告诉我为什么我们在过滤器中写这个 0xff000000 吗?
【发布时间】:2013-12-24 21:52:18
【问题描述】:

这是我想要了解的灰度过滤器代码

class GrayScale extends RGBImageFilter {
  @Override
    public int filterRGB(int x, int y, int rgb) {
    int a = rgb & 0xff000000;
    int r = (rgb >> 16) & 0xff;
    int g = (rgb >> 8) & 0xff;
    int b = rgb & 0xff;
    rgb = (r * 77 + g * 151 + b * 28) >> 8; 
    return a | (rgb << 16) | (rgb << 8) | rgb;
    }
}

【问题讨论】:

  • rgb &amp; 0xff000000 表示您对 rgb 颜色应用蒙版以获取其 alpha 值。

标签: java colors rgb


【解决方案1】:

您的输入格式为0xAARRGGBB,其中AA 是alpha(透明度),RR 是红色,GG 是绿色,BB 是蓝色分量。这是十六进制,因此值范围从 00 到 FF (255)。

您的问题是关于 alpha 值的提取。这一行:

int a = rgb &amp; 0xFF000000

如果您考虑像0xFFFFFFFF(白色)这样的值,AND 将返回原始颜色和掩码中设置的任何位;所以你会得到一个值0xFF,或者255(正确)。

【讨论】:

  • 感谢这条线让我很困惑,现在我明白了。
【解决方案2】:

int a = rgb & 0xff000000;
...
return a | ...;

只保留rgb(包含alpha component)的前8位。

【讨论】:

    【解决方案3】:

    除了 Ashes999 和 NPE 的答案,如果你想知道它在 java 内部是如何处理的,请查看this post

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 2022-10-16
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多