我有一個bmp圖像,可以轉換爲二維數組。這很好。 但我需要比較一個像素(coordonate(i,j))與其鄰居(8像素)的顏色。 如果一個或多個顏色相同,我將它們與其他鄰居進行比較,然後...... 所以我打算使用遞歸函數。訪問衝突:從bmp映像運行數組
的代碼:
void verifIdPoint (int TG[NBLIG][NBCOL], int T[NBLIG][NBCOL], short int Tpassage[NBLIG][NBCOL], int i, int j)
{
int u, v;
//printf ("saisie: %d %d \n", i, j);
//system("pause");
for (u=i-1; u<=i+1; u++)
{
for(v=j-1; v<=j+1; v++)
{
if(u>0 || v>0 || u<NBLIG || v<NBCOL)
{
if (TG[u][v] == TG[i][j])
{
tableauImgIntermediaire (TG, T, i, j);
//printf ("TG[%d][%d]===== TG[%d][%d]\n", u, v, i, j);
if (u<=0 || v<=0 || u>=NBLIG || v>=NBCOL)
{
}
else
{
if (Tpassage[u][v] == 0)
{
printf ("Passage: u v T %d %d %d \n", u, v, Tpassage[u][v]);
Tpassage[u][v] = 1;
verifIdPoint (TG, T, Tpassage, u, v);
}
}
}
}
}
}
}
該代碼可以使用的圖像,只需用相同的顏色(如在中間的灰色圓圈)的一部分。 但是當顏色像從(0,0)到(300,200)的棒子時,我有「訪問衝突(段錯誤)」錯誤...
圖像大小是300x200。 我想,這是因爲我試圖訪問我未分配的數組的一部分。
感謝, (對不起,我的英語)
問候
那些原來的'如果'是討厭的。但是在for循環中,'u'和'v'從* u = i-1 * *到*'u <= i + 1'。雖然沒有解釋「i」和「j」是什麼參數,但上下文表明他們是其他人稱之爲「x」和「y」的東西。在這種情況下,(1)檢查需要'if u> = 1'(並且鏡像爲'width-1'),但是(2)這種特殊的檢查是*不必要的(也就是說,如果輸入是正確)。 +1,但是,因爲注意到這些奇怪的測試搞砸了本應該是一個簡單的工作。 – usr2564301
嗯,這裏是我的理解:給出函數('i','j'),然後'u','v'迭代,然後進行邊界檢查。因此,如果'i = j = 0','u'和'v'的範圍從-1到1.因爲我假設邊緣應該被測試(例如(0,1),(1,0) ),應該允許'u'和'v'採取這些值,而不是給他們一個額外的邊界。 – shade4159