gpt4 book ai didi

java - 在 Java 中创建缓冲图像时数组索引越界

转载 作者:行者123 更新时间:2023-12-01 15:04:26 25 4
gpt4 key购买 nike

我正在尝试处理图像文件并将其作为 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 异常。这是否需要我缺少的不同数组或值?

最佳答案

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

关于java - 在 Java 中创建缓冲图像时数组索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13167332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com