-1

ご覧のとおり、バッファリングされた画像をピクセル化するメソッドを作成しようとしています。私が呼び出すこのメソッド内のすべてのメソッドをデバッグしました。splitARGB は、combineARGB と同様に正しく動作します。splitARGB 値 (アルファ、赤、緑、青) を格納するためのグローバル変数があります。私の問題は、内部ループを実行すると、同じ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;
}
4

1 に答える 1

0

1 つの問題は、内部ループで同じ値をチェックし続けることです。つまり、ループ宣言で yloop と xloop を 0割り当てたため、そのループを開始するたびに 0 から開始します。したがって、このループに入るたびに、0 から interval までの値をチェックするだけです。値を設定するときも同じです。これらの値をすべてのループの外側に割り当てる必要があります。これにより、同じグループを反復する代わりに、画像内の (x,y) インデックスを維持できます。

于 2013-03-29T19:04:48.257 に答える