Search code examples
javaimagemonochrome

Java BufferedImage get single pixel brightness


I want to convert coloured image to a monochrome, i thought to loop all pixel, but I don't know how to test if they are bright or dark.

        for(int y=0;y<image.getHeight();y++){
            for(int x=0;x<image.getWidth();x++){
                int color=image.getRGB(x, y);
                // ???how to test if its is bright or dark?
            }
        }

Solution

  • int color = image.getRGB(x, y);
    
    // extract each color component
    int red   = (color >>> 16) & 0xFF;
    int green = (color >>>  8) & 0xFF;
    int blue  = (color >>>  0) & 0xFF;
    
    // calc luminance in range 0.0 to 1.0; using SRGB luminance constants
    float luminance = (red * 0.2126f + green * 0.7152f + blue * 0.0722f) / 255;
    
    // choose brightness threshold as appropriate:
    if (luminance >= 0.5f) {
        // bright color
    } else {
        // dark color
    }