Search code examples
javaimage-processinggrayscale

display grayscale image in java


I created 2D array of floats in java, representing gray scale image, when each pixel is normalized - it between [0,1].

How can I take the 2D array and display the image (in gray scale of course)?

ty!


Solution

  • The easiest way is to make a BufferedImage out of it. To do that, you'll have to convert the values into colors:

    int toRGB(float value) {
        int part = Math.round(value * 255);
        return part * 0x10101;
    }
    

    That first converts the 0-1 range into 0-255 range, then produces a color where all three channels (RGB - red, green and blue) have the same value, which makes a gray.

    Then, to make the whole image, set all the pixel values:

    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    for (int y = 0; y < height; y++)
        for (int x = 0; x < width; x++)
            image.setRGB(x, y, toRGB(theFloats[y][x]));
    

    Once you have the image, you can save it to a file:

    ImageIO.save(image, 'png', new File('some/path/file.png'));
    

    Or, display it in some way, perhaps with Swing.. See for example this question.