I have each pixel that has a structure as below:
...........PIXEL............
[red | green | blue | alpha]
<-8--><--8---><--8--><--8-->
I need to do the following:
1. Extract RGBA values
2. Perform some calculations on RGB values and not A values.
3. Assemble them back together to form a pixel with new value.
Here is how I am doing it:
for(int i = 0;i < img.pixels.length;i++){
int pixel = img.pixels[i];
int red = (pixel & 0xFF000000) >>> 24;
int green = (pixel & 0x00FF0000) >>> 16;
int blue = (pixel & 0x0000FF00) >>> 8;
int alpha = (pixel & 0x000000FF);
println("Red: " + red + " Green: " + green + " Blue: " + blue + " Alpha: " + alpha);
/*
* Luminosity Method.
*/
red = (int) (red * 0.21);
green = (int) (green * 0.71);
blue = (int) (blue * 0.07);
/*
* Assemble them back again
*/
red = red << 24;
green = green << 16;
blue = blue << 8;
println("AvgRed : " + red + " AvgGreen: " + green + " AvgBlue: " + blue);
pixel= red | green | blue | alpha;
img.pixels[i] = pixel;
}
updatePixels();
But it seems that something is wrong with my shifting their positions again to assemble them.
I have values in the console as follows:
Red: 255 Green: 83 Blue: 100 Alpha: 82 // actual values
AvgRed : 889192448 AvgGreen: 3801088 AvgBlue: 1792 // new values after calculation and shifting
which indicate that something is wrong.
How do I properly assemble them back?