2013-04-06 3 views
0

이미지를 필터링하려고합니다. 먼저, int[][] 안에 RGB 값을 입력 한 다음 필터를 적용합니다. 다음 단계에서는 int[][]int[]으로 변환하고 마지막으로 새 이미지를 다시 표시하려고합니다. 내 코드 :int [] to 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의

예외 : java.awt.image.SinglePixelPackedSampleModel.setPixels에서 181,000 (알 수없는 소스) 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

변경 어레이 선언 라인, 그렇게된다면 '본다. –

+0

설명서 [http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/image/WritableRaster.html#setPixels(int, int, int, int, int [])] 목록 다음은이 예외에 대한 ** 두 가지 이유 ** 좌표가 경계에 있지 않거나 입력 int 픽셀 배열이 너무 작아 입력을 유지할 수없는 경우 ** –

+0

감사하지만 방금 아이디어를 시도했지만 여전히 같은 문제가 있습니다. – Enery93

답변

0

배열

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

3의 길이를 갖는 것, 따라서, 기초 제로인, 2의 최대 요소 참조 및

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

은 count가 ==가 될 때까지 while이 실패하지 않기 때문에 항상 배열을 오버런합니다 array.length 또는 3이고 array [3]은 존재하지 않습니다.

사용 while(count < array.length)이`INT [] 화소 = 새로운 INT [(폭 + 1) * (높이 + 1)] 대신

+0

당신의 아이디어를 시도했지만 같은 문제가 있습니다. 어쩌면 실수가 없기 때문에 더 많은 코드를 보여 드리겠습니다. 하지만 모든 라인을 확인하고 왜 그런 일이 일어나고 있는지 이해할 수 없습니다. – Enery93