我在java中有一个tiff图像的int [2048] [2048]原始数据数组。我想将该数组转换回BufferedImage。我该怎么办?
答案 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。
从获取数组的方法提供了一些文档如何组织的文档。