我正在尝试处理图像文件并将其作为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异常。这需要一个我不想要的不同数组或值吗?
答案 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;
}