2016-04-17 7 views
-3

2D配列を使用してイメージエディタを作成することになっています。この部分については、左から右に反転させてイメージのミラーを作成するコードを作成することになっています。代わりに私はそれを逆さにしています。私は間違って何をしていますか?2D配列とイメージのミラーを作成する

public void mirror() { 
    // TODO Auto-generated method stub 
    int[] img; 
    int left = 0, right = data.length -1; 
    while (right >= left) { 
     img = data[left]; 
     data[left++] = data[right]; 
     data[right--] = img; 
    }  
} 
+0

データとは何ですか、そのデータ構造は何ですか?また、2次元配列を使用していません。 – viviboox3

+0

この画像はASCII美術ですか?もしそうなら、多次元配列が必要ですか? X/Y座標は2Dなので?それが1次元画像でない限り? –

答えて

0

複数の問題点: 1.あなたは1次元アレイを使用しています。 2. 1d配列のdata.lengthは、行数を示します。 3.反転のためにdata.lengthを使用すると、2次元配列の列の代わりに行が反転してしまいます。 したがって、論理的に正しくない出力。問題は、あなただけの行列を作った配列をミラーリングするのではなく、配列の順序を逆にしてある

public int[][] mirror(int[][] original) { 
    int[][] mirror = original; 
    for (int i=0; i<original.length; i++) { 
     original[i] = reverseArray(original[i]); 
    } 
    return mirror; 
} 


public int[] reverseArray(int[] array) { 
    for (i = 0; i < array.length/2; i++) { 
     int temp = array[i]; 
     array[i] = array[array.length - 1 - i]; 
     array[array.length - 1 - i] = temp; 
    } 
    return array; 
} 
0

-

使用ミラー方法は次のようなものでなければなりません。実際にdataが2次元配列だったとすると、これはうまくいくはずです。

public void mirror() { 
    for (int i = 0; i < data.length; i++){ 
     for (int j = 0; j < data[i].length/2; j++){ 
      int temp = data[i][j]; 
      data[i][j] = data[i][data[i].length-j-1]; 
      data[i][data[i].length-j-1] = temp; 
     } 
    } 
}