3

我在 java 中有一个 tiff 图像的 int[2048][2048] 原始数据数组。我想将该数组转换回 BufferedImage。我应该如何进行?

4

2 回答 2

3

就这么简单:

BufferedImage image = ImageIO.read(new ByteArrayInputStream(array));
于 2013-06-25T13:14:45.843 回答
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 中。

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

您从中获取数组的方法应该提供一些文档,说明数据是如何组织的。

于 2013-06-25T17:56:44.963 回答