2012-02-02 2 views
1

현재 사용자 입력에 의한 평균 필터를 적용하여 주변 크기 및 파일 유형을 결정하는 프로그램을 작성하려고합니다. 내 프로그램은 준수하고 실행하지만 출력 된 이미지는 무엇을 넣었는지에 가깝지 않습니다. 그 내용을 읽거나 출력을 던지거나 수학을 계산하지만 이미지가 끝나는 지 확실하지 않습니다. 하지만 큰 소금과 후추 이미지. getRGB()에 의해 반환 지금 나는 그냥 그것은 int들로 포장 값을 ARGB하는 산술 연산을 적용 할 수 이해가되지 않습니다Java ImageIO 평균 필터

img = ImageIO.read(new File(fileName)); 

//get dimensions 
maxHeight = img.getHeight(); 
maxWidth = img.getWidth(); 

//create 2D Array for new picture 
int pictureFile[][] = new int [maxHeight][maxWidth]; 
for(int i = 0; i < maxHeight; i++){ 
    for(int j = 0; j < maxWidth; j++){ 
     pictureFile[i][j] = img.getRGB(j, i); 
    } 
} 

//Apply Mean Filter 
for (int v=1; v<=maxHeight-2; v++) { 
    for (int u=1; u<=maxWidth-2; u++) { 
     //compute filter result for position (u,v) 

     int sum = 0; 
     for (int j=-1; j<=1; j++) { 
      for (int i=-1; i<=1; i++) { 
       int p = pictureFile[u+i][v+j]; 
       sum = sum + p; 

      } 
     } 

     int q = (int) (sum/9); 
     pictureFile[u][v] = q; 
    } 
} 

//Turn the 2D array back into an image 
BufferedImage theImage = new BufferedImage(
    maxHeight, 
    maxWidth, 
    BufferedImage.TYPE_BYTE_GRAY); 
int value; 
for(int y = 0; y<maxHeight; y++){ 
    for(int x = 0; x<maxWidth; x++){ 

     value = pictureFile[y][x] ; 
     theImage.setRGB(x, y, value); 
    } 
} 

File outputfile = new File("saved.png"); 
ImageIO.write(theImage, "png", outputfile); 
+0

1) 빨리 더 도움 들어, [SSCCE] (http://sscce.org/)을 게시 할 수 있습니다. 2) 이미지를 다루는 SSCCE의 경우, 하나의 코드에 핫 링크하거나 코드로 생성하십시오. 3) 작은 '원래의/변형 된/예상 된'이미지를 연결하면 엄청난 도움이됩니다. 4) 질문이 있으십니까? 그렇다면 지금 물어볼 좋은 시간이 될 것입니다. –

답변

2

제대로 실행 얻을 필터를 의미하는 3 × 3을 적용하고 여기에 내 코드입니다 .

출력을 회색조로 표시하려면 getRGB()에서 반환 된 값을 회색조로 변환하고 회색 음영 값에 필터를 적용한 다음 다시 ARGB로 변환하여 setRGB()으로 전달해야합니다.

은 참조 :