Search code examples
javapngbufferedimagejavax.imageio

Converting Grayscale values from .csv to BufferedImage


I'm attempting to convert a .csv file containing grayscale values to an image using BufferedImage. The csv is read into pixArray[] initially, in which all values are doubles.

I am attempting to use BufferedImage to create a 100x100px output image with the code

                BufferedImage image = new BufferedImage(width,height,BufferedImage.
                    TYPE_BYTE_GRAY);
            for(int x = 0; x < width; x++)
            {
                for(int y = 0; y < height; y++)
                {
                    image.setRGB(x, y, (int)Math.round(pixArray[y]));
                }
            }

            File file_out = new File("output.png");
            try {
                ImageIO.write(image, "png", file_out);
            } catch (IOException e) {
                e.printStackTrace();
            }

but all I have as output is a 100x100 black square.

I've tried alternatives to TYPE_BYTE_GRAY with no success, as well as the png format for outout, and can't find what is producing this error.


Solution

  • It should be

    int g = (int)Math.round(pixArray[y]); 
    image.setRGB(x,y,new Color(g,g,g).getRGB());  
    

    What your current code is doing is setting the alpha to the pixel value but leaving the color components all zero.