2013-03-03 80 views
-1

正如您所看到的,我正在嘗試編寫一種方法來使緩衝圖像像素化。我已經調試過我稱之爲splitARGB的所有方法,以及combineARGB。 我有用於存儲splitARGB值(alpha,reds,greens,blues)的全局變量。我的問題似乎是,當通過內部循環運行時,它不斷獲得相同的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/)。 – 2013-03-04 22:35:47

+0

如果可能,我會建議你'擴展'BufferedImage;使像素化圖像的功能看起來像功能性,而不是面向對象的編程。 – 2013-03-04 22:38:37

回答

0

看來,一個問題可能是在你的內部循環,你繼續檢查相同values--那就是每次啓動循環你從0開始,因爲你分配yloop和xloop時間在循環聲明中爲0 。因此,每次你進入這個循環時,你都要通過間隔檢查值0。當您設置值時,也是如此。您應該在所有循環之外分配這些值,這樣您可以在圖像中保留(x,y)索引,而不是在同一組上迭代。