資源描述:
《投影法的源程序》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、以下是投影法的源程序,第二個(gè)參數(shù)是個(gè)BOOL變量,為真時(shí)表示在水平方向上做投影,否則在豎直方向上做投影。要注意的是,我們針對(duì)的雖然是二值圖,但為了處理的方便,用的是256級(jí)灰度圖,不過(guò)只用到了0和255兩種灰度級(jí)。BOOLProjection(HWNDhWnd,BOOLHori){DWORDOffBits,BufSize;LPBITMAPINFOHEADERlpImgData;LPSTRlpPtr;HLOCALhTempImgData;LPBITMAPINFOHEADERlpTempImgData;LPSTRlpTempPtr;HDChDc;HFI
2、LEhf;LONGx,y;intnum;//用的是256級(jí)灰度圖,不過(guò)只用到了0和255兩種灰度級(jí)。if(NumColors!=256){MessageBox(hWnd,"Mustbeamonobitmapwithgrayscalepalette!","ErrorMessage",MB_OK
3、MB_ICONEXCLAMATION);returnFALSE;}//到位圖數(shù)據(jù)的偏移值OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);//緩沖區(qū)大小BufSize=bf.bfSize-sizeof(BITMAPFI
4、LEHEADER);//為新圖緩沖區(qū)分配內(nèi)存if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL){MessageBox(hWnd,"Errorallocmemory!","ErrorMessage",MB_OK
5、MB_ICONEXCLAMATION);returnFALSE;}lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);//新圖緩沖
6、區(qū)初始化為255memset(lpTempImgData,(BYTE)255,BufSize);//拷貝頭信息memcpy(lpTempImgData,lpImgData,OffBits);if(Hori){//水平投影for(y=0;y7、=(char*)lpTempImgData+(BufSize-LineBytes-y*LineBytes);for(x=0;x8、}lpTempPtr=(char*)lpTempImgData+OffBits+x;for(y=0;y9、+sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD),(LPBITMAPINFO)lpTempImgData,DIB_RGB_COLORS);//起不同的結(jié)果文件名if(Hori)hf=_lcreat("c:\hproject.bmp",0);elsehf=_lcreat("c:\vproject.bmp",0);_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));_lwrite(hf,(LPSTR)lpTempImgData,BufSize);_lc
10、lose(hf);//釋放內(nèi)存和資源ReleaseDC(hWnd,hDc);LocalUnlock(hTempImgDat