int []到BufferedImage

时间:2013-04-06 01:06:42

标签: java exception int bufferedimage raster

我正在尝试过滤图片。首先,我将RGB值放在int[][]内,然后进行过滤。 在下一步中,我必须将int[][]转换为int[],最后我想再次显示新图像。这是我的代码:

 int row,col,count=0;
          int[] pixels = new int[width*height];

            while(count!=(pixels.length)){   
                for(row=0;row<height;row++){
                     for(col=0;col<width;col++){
                         pixels[count] = imageArray[row][col];
                         count++;
                     }
                }
            }

             BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
             WritableRaster raster = (WritableRaster) image.getData();

             raster.setPixels(0,0,width,height,pixels); //The problem appear in this line

这是我的错误。

  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:181000       at java.awt.image.SinglePixelPackedSampleModel.setPixels(Unknown Source)       at java.awt.image.WritableRaster.setPixels(Unknown Source)

我检查两个阵列的类型,大小,我不知道我能做什么。

使用下一个代码创建第一个数组int [] []:

int[][] imageArray = new int[height][width]; //...dar tamaño al array donde guardaremos la imagen

          for (int row = 0; row < height; row++) { //en este doble bucle vamos guardando cada pixel
             for (int col = 0; col < width; col++) {

                imageArray[row][col] = image.getRGB(col, row);
                     }
                  }

1 个答案:

答案 0 :(得分:0)

Java中的数组基于零,因此

int[] array = {1,2,3};

的长度为3,但最大元素引用为2和

while( count <= array.length ) {
    System.out.println( array[count] );
    ++count;
}

总是会超出数组,因为while在count = = array.length或3之前不会失败,并且array [3]不存在。

使用while( count < array.length )代替