2016-11-20 7 views
1

コードは、マトリックスに入り、9x9マトリックスに分割して操作を行うことについて話します。マトリックスエラーの範囲外

問題は、それが行列

コードエラーとは何である外の要素を探しているということでしょうか?

for (int x = 1; x < normal.Width-1; x++) 
      { 
       for (int y = 1; y < normal.Height-1; y++) 
       { 
        contador = 0; 

        //loop para separa o que se vai calcular 
        for (int a = x - 1; a < x + 1; a++) 
        { 
         for (int i = y - 1; i < y + 1; i++) 
         { 
          rcalc[contador] = (int)normal.GetPixel(x + a, y + i).R; 
          gcalc[contador] = (int)normal.GetPixel(x + a, y + i).G; 
          bcalc[contador] = (int)normal.GetPixel(x + a, y + i).B; 

          contador++; 

         } 
        } 
        r = medianacalc(rcalc); 
        g = medianacalc(gcalc); 
        b = medianacalc(bcalc); 
+1

タグをCではなくC#に変更してください。 –

答えて

1

xnormal.Width-2

aは、私はあなたを推測するので、x + aが範囲外することができ2*(normal.Width-2)normal.Widthよりも大きい)

することができ

xとして大きな可能性があることができする必要があります

(int)normal.GetPixel(x, y) 

または

(int)normal.GetPixel(a, i) 

代わりの

(int)normal.GetPixel(x + a, y + i) 
0

私はあなたがあなたの内側のループのみを繰り返すだろうが行列の各(x,y)セルの周囲3×3の正方形を(反復しようとしていることを推測しています2x2平方ですが、あなたは9x9、3 * 3 = 9 ...と言っています)。その場合に、aiは(なぜb?)ループのいずれかでなければならない:

for (int a = -1; a <= 1; a++) { 
    for (int b = -1; b <= 1; b++) { 
     rcalc[contador] = (int)normal.GetPixel(x + a, y + b).R; 
     gcalc[contador] = (int)normal.GetPixel(x + a, y + b).G; 
     bcalc[contador] = (int)normal.GetPixel(x + a, y + b).B; 
     contador++; 
    } 
} 

すなわち(a,b)(x,y)周囲にオフセットです。

または:

for (int a = x-1; a <= x+1; a++) { 
    for (int b = y-1; b <= y+1; b++) { 
     rcalc[contador] = (int)normal.GetPixel(a, b).R; 
     gcalc[contador] = (int)normal.GetPixel(a, b).G; 
     bcalc[contador] = (int)normal.GetPixel(a, b).B; 
     contador++; 
    } 
} 

すなわち(a,b)は、マトリックスに絶対インデックスです。