这是我的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;
}
}
您输入的格式是0xAARRGGBB
这里AA
是alpha(透明度),RR
是红色的,GG
是绿色的,并且BB
是蓝色成分。这是十六进制,因此值的范围是00到FF(255)。
您的问题是关于alpha值的提取。这行:
int a = rgb & 0xFF000000
如果您考虑的值0xFFFFFFFF
(白色),AND
将返回原始颜色和遮罩中设置的所有位;因此您将获得0xFF
或255的值(正确)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句