在Java中将2D数组转换为Image?

时间:2014-04-21 16:24:21

标签: java image bufferedimage

我有2D数组(它只有1 -0值),但它的类型是int [] []。

现在我想将该数组转换为图像(黑白二进制图像)。但我无法为我的问题找到合适的答案。我搜索了谷歌和这个网站。任何人都可以帮助我吗?

我已尝试过以下代码,但

   String path = "C:\\Users\\Cyrus\\Desktop\\test.jpg";
    BufferedImage image = new BufferedImage(b.length, b[0].length, BufferedImage.TYPE_INT_RGB);
    for (int x = 0; x < b.length; x++) { // b is my 2D array
        for (int y = 0; y < b[x].length; y++) {
            image.setRGB(x, y, b[x][y]);
        }
    }

    File ImageFile = new File(path);
    try {
        ImageIO.write(image, "jpg", ImageFile);
    } catch (IOException e) {
        e.printStackTrace();
    }

//修改我的代码后

String path = "C:\\Users\\Cyrus\\Desktop\\test.jpg";
    BufferedImage image = new BufferedImage(a.length, a[0].length, BufferedImage.TYPE_INT_RGB);
    for (int x = 0; x < a.length; x++) {
        for (int y = 0; y < a[x].length; y++) {
             int value ;
             if(a[x][y]==1)  value = new Color(255,255,255).getRGB();
             else value = new Color(0,0,0).getRGB();
            image.setRGB(x, y, value);

        }
    }

    File ImageFile = new File(path);
    try {
        ImageIO.write(image, "jpg", ImageFile);
    } catch (IOException e) {
        e.printStackTrace();
    }

但它返回错误的图像

1 个答案:

答案 0 :(得分:0)

您可以更具体地了解您获得的结果吗?它有什么例外吗?或者程序正常完成但没有产生你想要的结果?

你应该注意到你想在这里使用二进制图像,那么选择JPG有什么特别的理由吗?据我所知,JPG不是彩色三重RGB的本机表示(例如bmp)。一个jpeg文件是一个&#34;容器&#34;数据序列,其标题(EXIF,QT,...)中有大量信息,由标记标记。直接处理像素值&#34;&#34;在你的数组中,jpg文件中的数据序列必须被解码&#34;然后在你播放图像之后,主图像数据将被编码&#34;再次成为jpg流。

要直接使用像素值,我建议您使用其他格式(例如TGA,png,...)