访问冲突:从bmp映像运行数组

时间:2013-10-15 20:25:53

标签: c

我有一个bmp图像,我将其转换为二维数组。工作正常。 但我需要将一个像素(coordonate(i,j))的颜色与其邻居(8个像素)进行比较。 如果一个或多个颜色相同,我将它们与其他邻居进行比较...... 所以我打算使用递归函数。

代码:

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。 我想,那是因为我正在尝试访问未分配的数组的一部分。

谢谢, (对不起我的英文)

最好的问候

2 个答案:

答案 0 :(得分:1)

你应该检查你的界限。

if(u>0 || v>0 || u<NBLIG || v<NBCOL)
对于(0,0)和(NBLIG,NBCOL),

将评估为true。 (和(-1,-1))

if( (u >= 0 && u < NBLIG) && (v >= 0 && v < NBCOL) )

可能更符合您的要求。

您的第二个边界检查似乎是多余的,但如果您想保留它,则需要确保该值严格小于最大值。

答案 1 :(得分:0)

感谢您的回答!欣赏:) 但我认为我没有朝着正确的方向前进。 您如何看待洪水填充算法?

我正在尝试这样的代码:

 void fill(int TG[NBLIG][NBCOL], int i, int j, int couleurCible)
 {
     if (TG[i][j] == couleurCible)
     {
        TG[i][j] = couleurCible + 50;
        remplissage (TG[i][j+1], i, j, couleurCible);
        remplissage (TG[i][j-1], i, j, couleurCible);
        remplissage (TG[i+1][j], i, j, couleurCible);
        remplissage (TG[i-1][j], i, j, couleurCible);

     }
 }

使用couleurCible我的第一个像素(i,j)的颜色。

谢谢! 最诚挚的问候