Here is my code for GrayScale filter want to know about this

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

3 Answers

The format of your input is 0xAARRGGBB where AA is the alpha (transparency), RR is the red, GG is the green, and BB is the blue component. This is hexadecimal, so the values range from 00 to FF (255).

Your question is about the extraction of the alpha value. This line:

int a = rgb & 0xFF000000

If you consider a value like 0xFFFFFFFF (white), AND will return whatever bits are set in both the original colour and the mask; so you'll get a value of 0xFF, or 255 (correctly).

1

The

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

simply preserves the top 8 bits of rgb (which contain the alpha component).

0

Beside Ashes999 and NPE answers, if you want to know how it's treated internally in java, check out this post

0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.