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