2013-04-06 45 views
0

我试图过滤图像。首先,我将RGB值放在int[][]之内,然后进行过滤。 在接下来的步骤中,我必须将int[][]转换为int[],最后我希望再次显示新图像。这是我的代码:int []到BufferedImage

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 

这是我的错误。

异常在线程 “主” java.lang.ArrayIndexOutOfBoundsException:181000 在java.awt.image.SinglePixelPackedSampleModel.setPixels(未知来源) 在java.awt.image.WritableRaster.setPixels(未知来源)

我检查两个数组的类型和大小,我不知道我能做什么。

第一阵列,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); 
        } 
        } 
+0

改变数组声明行此'INT []个像素=新INT [(宽度+ 1)*(高度+ 1)];',看看它是否工作。 – 2013-04-06 02:07:23

+0

文档[http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/image/WritableRaster.html#setPixels(int,int,int,int,int [])]列表以下**两个**这个异常的原因:**如果坐标不在边界内,或者输入的int像素数组太小而无法保存输入** – 2013-04-06 02:17:18

+0

谢谢,但我刚刚尝试了您的想法,它仍然有同样的问题。 – Enery93 2013-04-06 23:48:48

回答

0

阵列在Java中是从零开始的,因此

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

将具有长度为3,但最大元素参考值为2和

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

将始终溢出数组,因为while不会失败,直到count为== array.length或3,而数组[3]不存在。

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

+0

我试过你的想法,但我有同样的问题。我将展示更多代码,因为也许错误不在那里。但是我检查了每一行,我不明白为什么会发生。 – Enery93 2013-04-06 10:58:03