2014-11-12 6 views
0

이미지의 모든 검정색 픽셀을 이전 픽셀의 색상으로 채색하고 싶습니다. 그리고, 2 개 이상의 연속적인 흑색 화소가있는 경우, 최종 흑색이 아닌 화소의 색이 취해진 다. 픽셀을 반복하는 방법을 알아 냈지만 픽셀은 색상을 변경하지 않습니다. 나는 "변경 사항 저장"행을 놓친다 고 생각합니다. 여기Java에서 이미지를 다른 픽셀 색상에 대해 다른 동작으로 파싱

코드 :

public static void iteratePixels() throws IOException { 
    File file = new File("C:\\blackDots.png"); 
    BufferedImage image = ImageIO.read(file); 
    int lastNotBlack = -1; 
    int actualColour = 0; 

    for (int x = 0; x < image.getHeight(); x++) { 
     for (int y = 0; y < image.getWidth(); y++) { 

      int black = -16777216; 

      try { 
       actualColour = image.getRGB(x, y); 

      } catch (Exception e) { 
       continue; 
      } 
      if(image.getRGB(x, y)==black){ 
       image.setRGB(x, y, lastNotBlack); 

       System.out.println("black pixel at: " +x +" "+y); 
      } 
      if (actualColour != black){ 
       lastNotBlack= actualColour; 
      } 

     } 
    } 
} 

그래서 어떻게 변화를 appy 수 있습니까? 아니면 다른 실수가 있습니까?

답변

1

경우에만 메모리 이미지의 픽셀을 변경하고,하지만 당신은 다시 파일에 그 픽셀을 작성해야합니다 :

ImageIO.write(image, "png", new File("C:\\blackDots_modified.png")); 

(모든 픽셀이 수정 된 후 호출 할)

참조 : https://docs.oracle.com/javase/tutorial/2d/images/saveimage.html

+0

감사합니다. 이제 새 이미지가 만들어 지지만 다음과 같이 보입니다. http://i.imgur.com/bqnQoHK.png 원본 파일은 검은 색 점이있는 단순한 흰색 이미지였습니다. 그것. 왜 마지막 픽셀이 무시됩니까? try-catch 부분을 제거하면 다음 오류가 발생합니다. "main"스레드의 예외 java.lang.ArrayIndexOutOfBoundsException : 경계를 벗어난 좌표! – Selphiron

+0

그러면 알고리즘에 문제가있는 것이 틀림 없습니다. 픽셀을 조작 한 후에 이미지를 저장하는 줄만 제공했습니다. 원래 질문에서 물었습니다. – cello

+0

X는 일반적으로 폭, y는 높이입니다. 당신의 for-loops에서, 여러분은 실수로 주어진 Except – cello