이미지를 필터링하려고합니다. 먼저, 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);
}
}
변경 어레이 선언 라인, 그렇게된다면 '본다. –
설명서 [http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/image/WritableRaster.html#setPixels(int, int, int, int, int [])] 목록 다음은이 예외에 대한 ** 두 가지 이유 ** 좌표가 경계에 있지 않거나 입력 int 픽셀 배열이 너무 작아 입력을 유지할 수없는 경우 ** –
감사하지만 방금 아이디어를 시도했지만 여전히 같은 문제가 있습니다. – Enery93