Search code examples
androidcolorsrgbgrayscale

How to apply, converting image from colored to grayscale algorithm to Android?


I am trying to use one of these algorithms to convert a RGB image to grayscale:

The lightness method averages the most prominent and least prominent colors: (max(R, G, B) + min(R, G, B)) / 2.

The average method simply averages the values: (R + G + B) / 3.

The formula for luminosity is 0.21 R + 0.71 G + 0.07 B.

But I get very weird results! I know there are other ways to acheive this but is it possible to do this way?

Here is the code:

for(int i = 0 ; i < eWidth*eHeight;i++){
        int R = (pixels[i] >> 16) ;     //bitwise shifting
        int G = (pixels[i] >> 8) ;
        int B = pixels[i] ;
        int gray = (R + G + B )/ 3 ;
        pixels[i] = (gray << 16) | (gray << 8) | gray   ;
}

Solution

  • You need to strip off the bits that aren't part of the component you're getting, especially if there's any sign extension going on in the shifts.

        int R = (q[i] >> 16) & 0xff ;     //bitwise shifting 
        int G = (q[i] >> 8) & 0xff ; 
        int B = q[i] & 0xff ;