-1

呼び出し元の関数にピクセルを返したいのですが、最後の値のみが取得されます。つまり、値をオーバーライドします...

get_pixel_info() メソッドは getPixelData() を呼び出しています。getPixelData() メソッドでは、最初のピクセルの rgb の値が rgb[] 配列に格納されており、rgb が返されます。これは、for ループが再び敵を getPixelData() メソッドに制御するためです。 1 番目のピクセルの 2 番目のピクセルの時間オーバーライド値など..すべてのピクセルのすべての値が必要ですが、1 しか得られません

ピクセル rgb の値は呼び出し元の関数に返される必要があります pls help

public static int[] get_pixel_info() 
{
    int[] rgb={0};
    int[][] rgb2 = new int[0][0];

    BufferedImage img;
    try 
    {
        img = ImageIO.read(new File(IMG));
        int[][] pixelData = new int[img.getHeight() * img.getWidth()][3];
        int counter = 0;
        for(int i = 0; i < img.getWidth(); i++) 
        {
            for(int j = 0; j < img.getHeight(); j++) 
            {
                rgb = getPixelData(img, i, j);

                for(int k = 0; k < rgb.length; k++) 
                {
                    pixelData[counter][k] = rgb[k];
                }

                counter++;                
            }            
        }
    } 
   catch (IOException e) 
   {
        e.printStackTrace();
   }
    return rgb;
}

public static int[] getPixelData(BufferedImage img, int x, int y) 
 {
    int argb = img.getRGB(x, y);   
    int rgb[] = new int[] {            
        ((argb >> 16) & 0xff), //red             
        (argb >> 8) & 0xff, //green
        (argb ) & 0xff //blue
    };

    System.out.println("rgb: " + Integer.toBinaryString(rgb[0]) + " " +        Integer.toBinaryString(rgb[1]) + " " + Integer.toBinaryString(rgb[2]));

    return rgb;
}
4

3 に答える 3

1

使用するつもりでしたか:

            pixelData[counter] = getPixelData(img, i, j);

3番目のネストされたループ(k)の代わりに?

ただし、「変換」は、BufferedImage表現よりもかなり多くのメモリを使用することを除いて、実際にはほとんど適合しないことに注意してください。

于 2013-01-03T09:22:26.067 に答える
1

コード、特に返す変数をよく見てください。あなたはRGBを返しています。rgb2 または PixelData を使用していません

そして、あなたがそれにいる間。Java の命名規則を見てみましょう。変数は大文字で始めるべきではなく、名前はアンダースコアの代わりにキャメルケースを使用する必要があります

于 2013-01-03T09:51:34.477 に答える
0

わたしにはできる:

public static int[] getPixelData(BufferedImage img, int x, int y) {
    int argb = img.getRGB(x, y);
    int rgb[] = new int[3];
    rgb[2] = argb & 0xff;         // b
    rgb[1] = (argb >> 8) & 0xff;  // g
    rgb[0] = (argb >> 16) & 0xff; // r
    return rgb;
}
于 2013-01-03T08:33:04.127 に答える