Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于循环到像素化的BuffereImage_Java_Image_Image Processing_Awt_Bufferedimage - Fatal编程技术网

Java 用于循环到像素化的BuffereImage

Java 用于循环到像素化的BuffereImage,java,image,image-processing,awt,bufferedimage,Java,Image,Image Processing,Awt,Bufferedimage,正如你们所看到的,我正试图写一个方法来对缓冲图像进行像素化。我已经调试了我调用的这个函数中的所有方法,splitARGB和combineARGB都能正常工作。 我有全局变量来存储splitARGB值(alpha、red、green、blues)。我的问题似乎是,当运行内部循环时,它不断得到相同的aRGB值(起初它们不同,但最终它只是开始吐出相同的值),然后当我在完成后检查图像时,它有0个更改 我有一些其他的方法可以很好地工作,它们调用相同的方法(splitARGB,combineARGB),它们

正如你们所看到的,我正试图写一个方法来对缓冲图像进行像素化。我已经调试了我调用的这个函数中的所有方法,splitARGB和combineARGB都能正常工作。 我有全局变量来存储splitARGB值(alpha、red、green、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;
}
publicstaticbufferedimage像素化(BufferedImage imgt){
//瓦尔斯
int-tempARGB=0;
int-avgAlpha=0;
int-avgRed=0;
int-avgGreen=0;
int-avgBlue=0;
整数区间=70;
//每2个Y像素,在X线上迭代一次
对于(int y=0;y<(imgt.getHeight()-interval);y=y+interval){
对于(int x=0;x<(imgt.getWidth()-interval);x=x+interval){
//内部像素组循环
对于(int-yloop=0;yloop
似乎一个问题可能是,在内部循环中,您不断检查相同的值——也就是说,每次启动该循环时,您都从0开始,因为您在循环声明中将yloop和xloop指定为0。因此,每次进入这个循环时,只需检查值0到间隔。设置值时也是这样。您应该在所有循环之外分配这些值,这样您就可以在图像中维护(x,y)索引,而不是在同一组中进行迭代。

要更快获得更好的帮助,请发布。如果可能,我建议您
扩展
BuffereImage;创建一个函数来对图像进行像素化似乎是功能性的,而不是面向对象的编程。