BOOL ImageErosion(BYTE *pData,int Width,int Height)
{//pData为图像数据的指针,Width和Height为图像的宽和高;
BYTE* pData1;
int m,n,i,j,mpiex,k,mpiex1;
BOOL bErosion;
if(pData==NULL)
{
AfxMessageBox("图像数据为空,请读取图像数据");
return FALSE;
}
//申请空间,pData1存放处理后的数据;
pData1=(BYTE*)new char[WIDTHBYTES(Width*8)*Height];
if(pData1==NULL)
{
AfxMessageBox("图像缓冲数据区申请失败,请重新申请图像数据缓冲区");
return FALSE;
}
memcpy(pData1,pData,WIDTHBYTES(Width*8)*Height);
for(i=10;i<Height-10;i++)
for(j=32;j<Width-32;j++)
{
bErosion=FALSE;
mpiex=*(pData+WIDTHBYTES(Width*8)*i+j);
if(mpiex==255)
{
//以下是用3*3的结构元素进行腐蚀;
for(m=-1;m<2;m++)
{
for(n=-1;n<2;n++)
{
piex1=*(pData+WIDTHBYTES(Width*8)*(i+m)+j+n);
if(piex1==0)
{
*(pData1+WIDTHBYTES(Width*8)*i+j)=0;
bErosion=TRUE;
break;
}
}
if(bErosion)
{
bErosion=FALSE;
break;
}
}
}
}
memcpy(pData,pData1,WIDTHBYTES(Width*8)*Height);
return TRUE;
}
BOOL ImageDilation(BYTE *pData,int Width,int Height)
{
BYTE* pData1;
int m,n,i,j,piex,k,piex1;
BOOL bDilation;
if(pData==NULL)
{
AfxMessageBox("图像数据为空,请读取图像数据");
return FALSE;
}
//申请空间,pData1存放处理后的数据;
pData1=(BYTE*)new char[WIDTHBYTES(Width*8)*Height];
if(pData1==NULL)
{
AfxMessageBox("图像缓冲数据区申请失败,请重新申请图像数据缓冲区");
return FALSE ;
}
memcpy(pData1,pData,WIDTHBYTES(Width*8)*Height);
for(i=10;i<Height-10;i++)
for(j=32;j<Width-32;j++)
{
bDilation=FALSE;
piex=*(pData+WIDTHBYTES(Width*8)*i+j);
if(piex==0)
{
//以下是用3*3的结构元素进行膨胀;
for(m=-1;m<2;m++)
{
for(n=-1;n<2;n++)
{
piex1=*(pData+WIDTHBYTES(Width*8)*(i+m)+j+n);
if(piex1==255)
{
*(pData1+WIDTHBYTES(Width*8)*i+j)=255;
bDilation=TRUE;
break;
}
}
if(bDilation)
{
bDilation=FALSE;
break;
}
}
}
}
memcpy(pData,pData1,WIDTHBYTES(Width*8)*Height);
return TRUE;
}