0

我正在尝试处理图像文件并将其作为 Image 对象返回,但是当我调用 public static BufferedImage getImageFromArray(int[] data, int columns, int rows) 时,我在以下代码中得到了 ArrayIndexOutOfBoundsException。

我将以下像素颜色存储到名为“data”的数组中:

[255,6,65,78,99,100,25,0,45,66,88,190,88,76,50]

我从一个看起来像这样的文本文件中解析出来:

255, 6, 65, 78, 99
100, 25, 0, 45, 66
88, 190, 88, 76, 50 

我正在尝试通过使用BufferedImage从这些数据生成图像,目前我正在用这个来打砖墙。根据上面的表结构将列和行传递给它。

    public static BufferedImage getImageFromArray(int[] data, int columns, int rows) {
    BufferedImage image = new BufferedImage(columns, rows, BufferedImage.TYPE_INT_RGB);
    WritableRaster raster = (WritableRaster) image.getData();
    raster.setPixels(0,0, columns, rows, data);
    image.setData(raster);
    return image;
}

当我点击 raster.setPixels 调用时,我得到了一个 OOB 异常。这是否需要我缺少的不同数组或值?

4

1 回答 1

2

这是我找到的解决方案,RGB 类型需要 3 个波段......因此要创建一个有效的数组:

private int[] imageArray(String fullFilePath, int rows, int columns) throws Exception{
    int picRows = rows;
    int picColumns = columns;
    data = getPixelData(fullFilePath);

    //3 bands in TYPE_INT_RGB
    int NUM_BANDS = 3;
    int[] arrayImage = new int[picRows * picColumns * NUM_BANDS];

    for (int i = 0; i < picRows; i++)
    {
        for (int j = 0; j < picColumns; j++) {
            for (int band = 0; band < NUM_BANDS; band++)
                for (int k = 0; k < data.length; k++)
                    arrayImage[((i * picRows) + j)*NUM_BANDS + band] = data[k];
        }
    }
    return arrayImage;
}
于 2012-11-01T02:29:53.280 回答