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

use*_*663 3 java rgb colors

这是我的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

ash*_*999 10

您输入的格式是0xAARRGGBB这里AA是alpha(透明度),RR是红色的,GG是绿色的,并且BB是蓝色成分.这是十六进制的,因此值的范围是00到FF(255).

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

int a = rgb & 0xFF000000

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