这是我的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;
}
}
答案 0 :(得分:10)
您的输入格式为0xAARRGGBB
,其中AA
为alpha(透明度),RR
为红色,GG
为绿色,{{1}是蓝色组件。这是十六进制的,因此值的范围是00到FF(255)。
您的问题是关于alpha值的提取。这一行:
BB
如果您考虑像int a = rgb & 0xFF000000
(白色)这样的值,0xFFFFFFFF
将返回原始颜色和蒙版中设置的任何位;因此,您将获得AND
或255(正确)的值。
答案 1 :(得分:1)
答案 2 :(得分:0)
除了Ashes999和NPE答案之外,如果你想知道如何在java内部对待它,请查看this post