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?
 
     
     
    