当前位置: 首页 > 知识库问答 >
问题:

在Java中创建缓冲映像时数组索引越界

陆光济
2023-03-14

我试图处理一个图像文件并将其作为图像对象返回,但是当我调用公共静态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异常。这是否需要另一个数组或我缺少的值?

共有1个答案

宿镜
2023-03-14

这是我找到的解决方案,类型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;
}
 类似资料:
  • 问题内容: 在我的游戏代码中,我尝试添加一张手牌。一旦我做完了,我的数组就超出了范围。一切看起来都不错,但也许我缺少了一些东西。 仅供参考,一个和两个是Player实例。来自Main类的相关代码(对格式感到抱歉。我很想将其传输到Stack Overflow): 卡类: 玩家等级: 问题答案: 问题出在你的循环上 没有其他任何值可设置,因此此循环不断循环,直到所有玩家拥有超过52张牌为止。一旦某人拥

  • 这是我的代码: 该程序的目的是要求用户输入一个字符串,然后统计字符串中每个字符的使用次数。 当我去编译程序时,它工作正常。当我运行程序时,我可以在弹出框中输入字符串,但是在我提交字符串并按确定后,我得到一个错误,说 我不完全确定问题是什么或如何解决。

  • 这似乎微不足道,但也许我对向量的理解并不是它应该是的。我在这段代码上得到[java.lang.ArrayIndexOutOfBoundsException:Array index out of range:1]。错误发生在第3行。既然look是基于向量的大小,那么数组怎么会越界呢? 方法“getChangeSets()”返回一个列表。该列表最初是作为向量创建的。

  • 我的目标是创建一个新的实例,其中前2个元素是原始元素,之后是最后3个元素的中间值。例如,< code>[5,2,9,1,7,4,6,3,8]变成< code>[5,2,5,2,7,4,6,4,6]。 我解决这个问题的方法是创建2个新的数组列表,其中一个是从索引2开始的3个元素之间的子数组,具有排序,最后将新子数组的索引1放入我的新数组列表中。但是,这会遇到索引越界错误。

  • 我一直在四处寻找是否有任何东西可以帮助我,但我不太了解人们的回答,任何我所了解的似乎都不能解决问题!所以基本上正如标题所说,我得到了一个数组索引越界异常,但我不知道为什么。非常感谢任何帮助。 代码:

  • 我已经用Java编写了一个图像旋转的方法(允许旋转90度、180度和270度),但它似乎没有正常工作。很明显,我做错了什么,但我完全不知道是什么。输出的问题是图像确实是旋转的,但图像中有黑色部分,就像图像不在正确的位置一样。 我的第一次尝试是在不使用作为目标的结果变量的情况下执行此操作,而是执行以下操作: 旋转很好,图像中没有黑色部分,但颜色很奇怪,就像有些颜色改变了,皮肤颜色变红了一样。所以当我