2016-11-20 30 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

x可以normal.Width-2

a可能是大如x

因此,x + a可以2*(normal.Width-2)可以是超出範圍(大於normal.Width

我想你應該說是

(int)normal.GetPixel(x, y) 

(int)normal.GetPixel(a, i) 

,而不是

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

我猜你要遍歷各地各(x,y)細胞一個3x3的方形矩陣中的(雖然你的內部循環只會迭代一個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)是絕對索引到基質。