www.pudn.com > erotion.rar > erotion.c
//数字图像腐蚀程序
/*针对的都是黑色点。参数中有一个BOOL变量,
为真时,表示在水平方向进行腐蚀运算,即结构元素B为(1 ,1. ,1)
否则在竖直方向上进行腐蚀运算,即结构元素B为1 1.1 。*/
BOOL Erosion(HWND hWnd,BOOL Hori)
{
DWORD BufSize;
LPBITMAPINFOHEADER lpImgData;
LPSTR lpPtr;
HLOCAL hTempImgData;
LPBITMAPINFOHEADER lpTempImgData;
LPSTR lpTempPtr;
HDC hDc;
HFILE hf;
LONG x,y;
unsigned char num;
int i;
//为了处理的方便,仍采用256级灰度图,不过只用到了调色板中0和255两项
if( NumColors!=256){
MessageBox(hWnd,"Must be a mono bitmap with
grayscale palette!","Error Message",
MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
//BufSize为缓冲区大小
BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER);
//为新的缓冲区分配内存
if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)
{
MessageBox(hWnd,"Error alloc memory!","Error Message",MB_OK|
MB_ICONEXCLAMATION);
return FALSE;
}
lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);
//拷贝头信息和位图数据
memcpy(lpTempImgData,lpImgData,BufSize);
if(Hori)
{
//在水平方向进行腐蚀运算
for(y=0;y