如何将原始数据数组转换为BufferedImage

时间:2013-06-25 13:12:09

标签: java

我在java中有一个tiff图像的int [2048] [2048]原始数据数组。我想将该数组转换回BufferedImage。我该怎么办?

2 个答案:

答案 0 :(得分:3)

这很简单:

BufferedImage image = ImageIO.read(new ByteArrayInputStream(array));

答案 1 :(得分:2)

当您说原始数据时,这并没有说明数据的格式,我假设它将采用最常见的格式:ARGB。将其转换为BufferedImage然后可以通过使用BufferedImage.setRGB()方法简单地传输每个像素来完成:

public static BufferedImage toBufferedImage(int[][] rawRGB) {
    int h = rawRGB.length;
    int w = rawRGB[0].length;
    BufferedImage i = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    for (int y=0; y<h; ++y) {
        for (int x=0; x<w; ++x) {
            int argb = rawRGB[y][x];
            i.setRGB(x, y, argb);
        }
    }
    return i;
}

你明白了,只需逐像素地复制到BufferedImage中。

如果图像似乎在一个或两个维度中镜像,则需要分别使用(w-x-1,h-y-1)在setRGB调用中进行校正。 如果图像似乎已旋转,请使用w和h swapped以及setRGB(y,x,argb)创建图像。 如果颜色出现反转/乱码,请找出argb值中的通道顺序并相应地移动它以使通道顺序为A,R,G,B。像素也可能是完全不同的颜色模型 - 您需要查找了解它们所处的颜色模型并将每个像素转换为ARGB。

获取数组的方法提供了一些文档如何组织的文档。