【问题标题】:Create image from double Array with color intensity从具有颜色强度的双阵列创建图像
【发布时间】:2019-12-05 16:21:38
【问题描述】:

我有一个带有图像颜色强度值的二维双精度数组,看起来与此类似(我的数组大小为 256x256,填充了如下值):

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

是否可以从这个文件中创建一个图像对象?

我当前的代码:

    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");
    }

为了测试它,我尝试创建一个 png 文件。但是这段代码目前只产生一个空白的 png 文件。 由于我是 Java 新手,所以我使用 this 帖子作为指南。

如果我可以直接创建一个 Image 对象,而无需先创建一个 png,那将是最好的。

【问题讨论】:

    标签: java double bufferedimage


    【解决方案1】:

    我可以自己解决问题:

            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");
            }
    

    doubleToColor 函数将我的双打转换为 RGB 代码:

        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;
        }
    
    

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 2020-05-31
      • 1970-01-01
      • 2018-11-07
      • 2015-09-01
      • 2020-03-08
      • 2014-09-17
      • 1970-01-01
      • 2012-07-01
      相关资源
      最近更新 更多