-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;
}
爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2013-03-04 22:35:47
如果可能,我會建議你'擴展'BufferedImage;使像素化圖像的功能看起來像功能性,而不是面向對象的編程。 – 2013-03-04 22:38:37