2013-03-03 3 views
-1

보시다시피 저는 버퍼링 된 이미지를 픽셀 화하는 메서드를 작성하려고합니다. 이 호출 내에서 모든 메서드를 디버깅했습니다. splitARGB는 결합하여 올바르게 작동합니다. splitARGB 값 (알파, 레드, 그린, 블루스)을 저장하기위한 전역 변수가 있습니다. 내 문제는 인테리어 루프를 실행하면 같은 aRGB 값을 지속적으로 얻게되는 것 같습니다. (처음에는 달라 지지만 결국에는 같은 값으로 뱉어 내기 시작합니다.) 그런 다음 이미지가 끝난 후 체크 아웃하면 0 개의 변경 사항이 있습니다.BufferedImage for loop to pixelate

나는 완벽하게 작동하는 몇 가지 다른 메소드가 있는데, 이들은 같은 메소드 (splitARGB, combineARGB)를 호출하며, 이것들은 잘 동작하기 때문에 이것에 문제가있다. 모든 도움을 주셨습니다.

public static BufferedImage pixelate(BufferedImage imgt) { 
    //vars 
    int tempARGB = 0; 
    int avgAlpha = 0; 
    int avgRed = 0; 
    int avgGreen = 0; 
    int avgBlue = 0; 
    int interval = 70; 

    //every 2 Y pixels, iterate through the X line 
    for (int y = 0; y < (imgt.getHeight() - interval); y = y + interval) { 
     for (int x = 0; x < (imgt.getWidth() - interval); x = x + interval) { 

      //interior pixel group loop 
      for (int yloop = 0; yloop < interval; yloop++) { 
       for (int xloop = 0; xloop < interval; xloop++) { 

        tempARGB = imgt.getRGB(yloop, xloop); 
        //System.out.println("XLOOP VAL:" + xloop); 
        //System.out.println("YLOOP VAL:" + yloop); 
        //System.out.println("TEMPARGB:" + tempARGB); 
        splitARGB(tempARGB); 
        avgAlpha = avgAlpha + alpha; 
        avgRed = avgRed + reds; 
        avgGreen = avgGreen + greens; 
        avgBlue = avgBlue + blues; 
       } 
      } 
      //Average the values 
      avgAlpha = avgAlpha/interval; 
      avgRed = avgRed/interval; 
      avgGreen = avgGreen/interval; 
      avgBlue = avgBlue/interval; 
      combineARGB(avgAlpha, avgRed, avgGreen, avgBlue); 
      System.out.println("New RGB:" + newRGB); 

      //loop again to assign the values 
      for (int yloop2 = 0; yloop2 < interval; yloop2++) { 
       for (int xloop2 = 0; xloop2 < interval; xloop2++) { 
        imgt.setRGB(xloop2, yloop2, newRGB); 
       } 
      } 
     } 
    } 
    return imgt; 
} 
+1

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

+0

가능하면 BufferedImage를'extend'하는 것이 좋습니다. 이미지를 픽셀 화하는 기능을 객체 지향 프로그래밍보다는 기능처럼 보이게 만듭니다. –

답변

0

하나의 문제는 귀하의 내부 루프에서, 당신은 같은 values--, 당신은 당신이 yloop를 할당에 xloop 때문에 0에서 시작하고 그 루프를 시작할 때마다 계속 확인하는 것이 될 수 있음을 보인다 0 루프 선언이 있습니다. 따라서이 루프를 시작할 때마다 0에서 interval 사이의 값을 확인하려고합니다. 값을 설정할 때도 마찬가지입니다. 이 값을 모든 루프 외부에 할당하면 같은 그룹을 반복하는 대신 이미지에서 (x, y) 색인을 유지 관리 할 수 ​​있습니다.