有谁告诉我为什么我们在过滤器中写这个0xff000000?

时间:2013-12-07 14:45:27

标签: java colors rgb

这是我的GrayScale过滤器的代码想知道这个

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;
    }
}

3 个答案:

答案 0 :(得分:10)

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

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

BB

如果您考虑像int a = rgb & 0xFF000000(白色)这样的值,0xFFFFFFFF将返回原始颜色和蒙版中设置的任何位;因此,您将获得AND或255(正确)的值。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

除了Ashes999和NPE答案之外,如果你想知道如何在java内部对待它,请查看this post