0

現在、各ピクセルのrgb値を変更して配列に配置することで、画像を水平方向に反転させるコードを理解しようとしています。私はこれをイメージを垂直方向に反転させるように働かせることができましたが、私の人生は水平に働くことができません。なぜ私がoutOfBoundsExceptionを取得し続けるのか分かりません。注目すべき点として、このコードは正方形の画像では機能しますが、長方形では機能しません。だから私のコードは、小さな配列の値を読み取ると、このループをテストすることによって、それをデバッグするからイメージをスキャンするときにこのループが私にarrayIndexOutOfBoundsExceptionを与えるのはなぜですか?

int width = selection.getWidth(); 
int height = selection.getHeight(); 
int rgb[][] = new int[height][width]; 
int rgb2[][] = new int[height][width]; 

for (int i = 0; i < height; i++) { 
    for (int j = 0; j < width; j++) { 
     rgb[i][j] = selection.getRGB(i, j); 
     rgb2[i][j] = selection.getRGB(i, j); 
     System.out.println(j); 
    } 
} 

ですが、私は何が起こっているかを把握することはできません。私は手でいくつかの値をやってみたが、それは行ごとにスキャンする必要があり、ピクセル値を持つ画像の同じ高さと幅の2次元配列を作成するように思えます。しかし、それは決して内側のループから抜け出すことはありません。内側のループの何かが範囲外です。

はさえ

for (int i = 0; i < rgb.length; i++) { 
     for (int j = 0; j < rgb[0].length; j++) { 
      rgb[i][j] = selection.getRGB(i, j); 
      rgbTwo[i][j] = selection.getRGB(i, j); 

     } 
    } 

をやってそれはまだ座標が範囲外であることを述べています。私はなぜこれが水平に働いていないのか分かりませんが、それは垂直のためのもので、四角形ではありますが長方形ではありません。私の垂直フリップは、正方形と長方形の両方で機能します。

+0

'i'と' j'は後方にあります。 widthは 'getRGB'のために最初にすべきですか? – Carcigenicate

答えて

0

getRGB(i, j)getRGB(j, i)に置き換えます。 x値はy値の前に置かれます。 (hereを参照してください)

+0

ありがとうございました。私はその問題で3つのループを持ち、それが問題でした。 –

関連する問題