0

I've got a two dimensional double Array with color intensity values of an image, looking similar to this (my arrays size is 256x256 filled up with values as below):

790.0 739.0 690.0 601.0 582.0 630.0 730.0 773.0
982.0 879.0 754.0 695.0 687.0 631.0 630.0 666.0
1046.0 1080.0 1070.0 990.0 872.0 730.0 647.0 657.0
1008.0 998.0 962.0 959.0 944.0 930.0 921.0 932.0

Is it possible to create an Image Object out of this file?

My current code:

    Double imageLayer[][] = vtkLayers.get(layer);

    int xLenght = imageLayer.length;
    int yLength = imageLayer[0].length;

    System.out.println(xLenght);
    System.out.println(yLength);

    BufferedImage b = new BufferedImage(xLenght, yLength, 3);

    for(int x = 0; x < xLenght; x++) {
        for(int y = 0; y < yLength; y++) {
            int rgb = (imageLayer[x][y]).intValue() << 16 | (imageLayer[x][y]).intValue() << 8 | (imageLayer[x][y]).intValue();
            b.setRGB(x, y, rgb);
        }
    }
    try {
        File outputfile = new File("C:\\temp\\image.png");
        ImageIO.write(b, "png", outputfile);
    }
    catch (IOException e){
        System.out.println("Could not create picture");
    }

To test it I tried to create a png file. But this code currently only produces a blank png File. As I'm new to Java I've used this post as guide.

It would be the best, if I can create an Image object directly, without creating a png first.

Stephan Häberle
  • 340
  • 2
  • 14

1 Answers1

0

I could solve the problem by myself:

        Double imageLayer[][] = vtkLayers.get(layer);

        // Initialize BufferedImage, assuming Color[][] is already properly populated.
        BufferedImage bufferedImage = new BufferedImage(imageLayer.length, imageLayer[0].length,
                BufferedImage.TYPE_INT_RGB);

        // Set each pixel of the BufferedImage to the color from the Color[][].
        for (int x = 0; x < imageLayer.length; x++) {
            for (int y = 0; y < imageLayer[x].length; y++) {
                Color test = doubleToColor(imageLayer[x][y], 4080);

                bufferedImage.setRGB(x, y, test.getRGB());
            }
        }

        try {
            File imageFile = new File(path);
            ImageIO.write(bufferedImage, "png", imageFile);
        }
        catch (Exception e){
            System.out.println("Failed to create image");
        }

The function doubleToColor converts my doubles to an RGB code:

    public static Color doubleToColor(double x,double maxx){
        float cR=(float)(0.5 + (x / (2 * maxx)));
        float cG=(float)(0.5 + (x / (2 * maxx)));
        float cB=(float)(0.5 - (x / (2 * maxx)));
        Color c = new Color(cR,cG,cB);
        return c;
    }

Stephan Häberle
  • 340
  • 2
  • 14