BufferedImage for循环到像素化

时间:2013-03-03 14:06:02

标签: java image image-processing awt bufferedimage

正如您所看到的,我正在尝试编写一种方法来对缓冲图像进行像素化处理。我调试了这个调用的所有方法,splitARGB正常工作以及combineARGB。 我有全局变量来存储splitARGB值(alpha,reds,greens,blues)。我的问题似乎是,当通过内部循环运行时,它不断获得相同的aRGB值(起初它们不同但最终它只是开始吐出相同的值)然后当我完成后检查图像时,它有0个变化。

我有一些其他方法可以完美地工作,并且它们调用相同的方法(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 个答案:

答案 0 :(得分:0)

似乎有一个问题可能是在你的内部循环中,你继续检查相同的值 - 也就是说,每次启动该循环时,你从0开始,因为你指定了yloop和xloop为0 循环声明中。因此,每次进入此循环时,您只需要检查值0到间隔。设置值时也一样。您应该在所有循环之外分配这些值,这样您就可以在图像中维护(x,y)索引,而不是在同一组上进行迭代。