在Java中创建Bufferedimage时,数组索引超出界限

时间:2012-10-31 20:59:20

标签: java image bufferedimage

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

我将以下像素颜色存储到名为“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异常。这需要一个我不想要的不同数组或值吗?

1 个答案:

答案 0 :(得分:1)

这是我找到的解决方案,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;
}