亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vc++開發輪廓提取源程序.txt

?? 指紋識別程序
?? TXT
字號:
VC++開發輪廓提取源程序 
BOOL Outline(HWND hWnd) 
{ 
DWORD BufSize; 
LPBITMAPINFOHEADER lpImgData; 
LPSTR lpPtr; 
HLOCAL hTempImgData; 
LPBITMAPINFOHEADER lpTempImgData; 
LPSTR lpTempPtr; 
HDC hDc; 
HFILE hf; 
LONG x,y; 
int num; 
int nw,n,ne,w,e,sw,s,se; 
//我們處理的實際上是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=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); 
for (y=1;y<bi.biHeight-1;y++){ //注意y 的范圍是從1 到高度-2 
//lpPtr 指向原圖數據,lpTempPtr 指向新圖數據 
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes); 
lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes); 
for (x=1;x<bi.biWidth-1;x++){ 
if(*(lpPtr+x)==0){ //是個黑點 
//查找八個相鄰點 
nw=(unsigned char)*(lpPtr+x+LineBytes-1); 
n=(unsigned char)*(lpPtr+x+LineBytes); 
ne=(unsigned char)*(lpPtr+x+LineBytes+1); 
w=(unsigned char)*(lpPtr+x-1); 
e=(unsigned char)*(lpPtr+x+1); 
sw=(unsigned char)*(lpPtr+x-LineBytes-1); 
s=(unsigned char)*(lpPtr+x-LineBytes); 
se=(unsigned char)*(lpPtr+x-LineBytes+1); 
num=nw+n+ne+w+e+sw+s+se; 
if(num==0) //說明都是黑點 
*(lpTempPtr+x)=(unsigned char)255; //刪除該黑點 
} 
} 
} 
if(hBitmap!=NULL) 
DeleteObject(hBitmap); 
hDc=GetDC(hWnd); 
//創立一個新的位圖 
hBitmap=CreateDIBitmap(hDc, (LPBITMAPINFOHEADER)lpTempImgData, 
(LONG)CBM_INIT,(LPSTR)lpTempImgData+sizeof(BITMAPINFOHEADER) + 
NumColors*sizeof(RGBQUAD),(LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS); 

hf=_lcreat("c:\\outline.bmp",0); 
_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER)); 
_lwrite(hf,(LPSTR)lpTempImgData,BufSize); 
_lclose(hf); 
//釋放內存和資源 
ReleaseDC(hWnd,hDc); 
LocalUnlock(hTempImgData); 
LocalFree(hTempImgData); 
GlobalUnlock(hImgData); 
return TRUE; 
} 
堆棧的數據結構和操作 
//堆棧結構 
typedef struct{ 
HGLOBAL hMem; //堆棧全局內存句柄 
POINT *lpMyStack; //指向該句柄的指針 
LONG ElementsNum; //堆棧的大小 
LONG ptr; //指向棧頂的指針 
}MYSTACK; 
//初始化堆棧的操作,第二個參數指定堆棧的大小 
BOOL InitStack(HWND hWnd,LONG StackLen) 
{ 
SeedFillStack.ElementsNum=StackLen; //將堆棧的大小賦值 
if((SeedFillStack.hMem=GlobalAlloc(GHND,SeedFillStack. 
ElementsNum*sizeof(POINT)))==NULL) 
{ 
//內存分配錯誤,返回FALSE; 
MessageBox(hWnd,"Error alloc memory!","ErrorMessage",MB_OK| 
MB_ICONEXCLAMATION); 
return FALSE; 
} 
SeedFillStack.lpMyStack=(POINT *)GlobalLock(SeedFillStack.hMem); 
//緩沖區全部清零 
memset(SeedFillStack.lpMyStack,0,SeedFillStack.ElementsNum*sizeof(POINT)); 
//堆頂指針為零 
SeedFillStack.ptr=0; 
//成功,返回TRUE 
return TRUE; 
} 

//析構函數 
void DeInitStack() 
{ 
//釋放內存,重置堆棧大小及棧頂指針。 
GlobalUnlock(SeedFillStack.hMem); 
GlobalFree(SeedFillStack.hMem); 
SeedFillStack.ElementsNum=0; 
SeedFillStack.ptr=0; 
} 
//push 操作 
BOOL MyPush(POINT p) 
{ 
POINT *TempPtr; 
if(SeedFillStack.ptr>=SeedFillStack.ElementsNum) 
return FALSE; //棧已滿,返回FALSE 
//進棧,棧頂指針加1 
TempPtr=(POINT *)(SeedFillStack.lpMyStack+SeedFillStack.ptr++); 
(*TempPtr).x=p.x; 
(*TempPtr).y=p.y; 
return TRUE; 
} 
//pop 操作 
POINT MyPop() 
{ 
POINT InvalidP; 
InvalidP.x=-1; 
InvalidP.y=-1; 
if(SeedFillStack.ptr<=0) 
return InvalidP; //棧為空,返回無效點 
SeedFillStack.ptr--; //棧頂指針減1 
//返回棧頂點 
return *(SeedFillStack.lpMyStack+SeedFillStack.ptr); 
} 
//判斷堆棧是否為空 
BOOL IsStackEmpty() 
{ 
return (SeedFillStack.ptr==0)?TRUE:FALSE; 
} 
如果讀者對堆棧的概念還不清楚,請參閱有關數據結構方面的書籍,這里就不詳述了。 
要注意的是:1. 要填充的區域是封閉的;2. 我們處理的雖然是二值圖,但實際上是256 級 
灰度圖,不過只用到了0 和255 兩種顏色;3.在菜單中選擇種子填充命令時,提示用戶用鼠 
標點取一個要填充區域中的點,處理是在WM_LBUTTONDOWN 中。 
MYSTACK SeedFillStack; 

BOOL SeedFill(HWND hWnd) 
{ 
DWORD BufSize; 
LPBITMAPINFOHEADER lpImgData; 
HLOCAL hTempImgData; 
LPBITMAPINFOHEADER lpTempImgData; 
LPSTR lpTempPtr,lpTempPtr1; 
HDC hDc; 
HFILE hf; 
POINT CurP,NeighborP; 
//我們處理的實際上是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=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(!InitStack(hWnd,(LONG)bi.biHeight*bi.biWidth)){ //初始化堆棧 
//若失敗,釋放內存,返回 
LocalUnlock(hTempImgData); 
LocalFree(hTempImgData); 
GlobalUnlock(hImgData); 
return FALSE; 
} 
lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes- 
SeedPoint.y*LineBytes)+SeedPoint.x; 
if(*lpTempPtr==0){ 
//鼠標點到了黑點上,提示用戶不能選擇邊界上的點,返回FALSE 
MessageBox(hWnd,"The point you select is a contour point!","Error 
Message",MB_OK|MB_ICONEXCLAMATION); 
LocalUnlock(hTempImgData); 

LocalFree(hTempImgData); 
GlobalUnlock(hImgData); 
DeInitStack(); 
return FALSE; 
} 
//push 該點(用戶用鼠標選擇的,處理是在 
WM_LBUTTONDOWN 中 
MyPush(SeedPoint); 
while(!IsStackEmpty()) //堆棧不空則一直處理 
{ 
CurP=MyPop(); //pop 棧頂的點 
lpTempPtr=(char *)lpTempImgData+(BufSize- 
LineBytes-CurP.y*LineBytes)+CurP.x; 
//將該點涂黑 
*lpTempPtr=(unsigned char)0; 
//左鄰點 
if(CurP.x>0) //注意判斷邊界 
{ 
NeighborP.x=CurP.x-1; 
NeighborP.y=CurP.y; 
lpTempPtr1=lpTempPtr-1; 
if(*lpTempPtr1!=0) //如果為白,表示還沒有填,進棧 
MyPush(NeighborP); 
} 
//上鄰點 
if(CurP.y>0) //注意判斷邊界 
{ 
NeighborP.x=CurP.x; 
NeighborP.y=CurP.y-1; 
lpTempPtr1=lpTempPtr+LineBytes; 
if(*lpTempPtr1!=0) //如果為白,表示還沒有填,進棧 
MyPush(NeighborP); 
} 
//右鄰點 
if(CurP.x<bi.biWidth-1) //注意判斷邊界 
{ 
NeighborP.x=CurP.x+1; 
NeighborP.y=CurP.y; 
lpTempPtr1=lpTempPtr+1; 
if(*lpTempPtr1!=0) //如果為白,表示還沒有填,進棧 
MyPush(NeighborP); 
} 
//下鄰點 
if(CurP.y<bi.biHeight-1) //注意判斷邊界 

{ 
NeighborP.x=CurP.x; 
NeighborP.y=CurP.y+1; 
lpTempPtr1=lpTempPtr-LineBytes; 
if(*lpTempPtr1!=0) //如果為白,表示還沒有填,進棧 
MyPush(NeighborP); 
} 
} 
//析構堆棧,釋放內存 
DeInitStack(); 
if(hBitmap!=NULL) 
DeleteObject(hBitmap); 
hDc=GetDC(hWnd); 
//創建新的位圖 
hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData, 
(LONG)CBM_INIT,(LPSTR)lpTempImgData+sizeof(BITMAPINFOHEADER) + 
NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS); 
hf=_lcreat("c:\\seed.bmp",0); 
_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER)); 
_lwrite(hf,(LPSTR)lpTempImgData,BufSize); 
_lclose(hf); 
//釋放內存和資源 
ReleaseDC(hWnd,hDc); 
LocalUnlock(hTempImgData); 
LocalFree(hTempImgData); 
GlobalUnlock(hImgData); 
return TRUE; 
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩综合在线免费观看| www精品美女久久久tv| 日日夜夜精品免费视频| 中文字幕欧美三区| 日韩女优制服丝袜电影| 欧美日韩精品一区二区三区四区| 99re热视频这里只精品| 国产精品亚洲一区二区三区妖精| 美女网站色91| 久久国产精品99久久久久久老狼| 精油按摩中文字幕久久| 久久9热精品视频| 欧美日韩你懂得| 一区二区三区在线视频播放| 亚洲精品视频一区二区| 亚洲国产成人tv| 日韩影院在线观看| 91久久国产最好的精华液| 色婷婷国产精品| 欧美伦理电影网| 精品久久五月天| 国产免费久久精品| 亚洲日本护士毛茸茸| 亚洲精品国产a久久久久久| 成人h精品动漫一区二区三区| 99久久精品免费| 国产欧美日韩不卡免费| 国产毛片一区二区| 欧美日韩高清一区二区| 亚洲图片一区二区| 欧美猛男超大videosgay| 一区二区三区中文字幕在线观看| 日本精品免费观看高清观看| 亚洲精品亚洲人成人网在线播放| 91视视频在线观看入口直接观看www| 欧美色成人综合| 五月婷婷久久丁香| 本田岬高潮一区二区三区| 欧美另类久久久品| 丝袜美腿亚洲一区| 欧美一二三区在线观看| 国产精品久久久久四虎| 日韩不卡在线观看日韩不卡视频| 成人一级视频在线观看| 制服丝袜一区二区三区| 亚洲精品国产精华液| 欧美图片一区二区三区| 日本一区二区三区高清不卡| 高清不卡在线观看av| 日韩一区二区在线免费观看| 久久国产免费看| 日本一区二区三区视频视频| 91啪亚洲精品| 麻豆一区二区三| 国产日韩欧美精品综合| 色94色欧美sute亚洲13| 麻豆国产一区二区| 中文字幕不卡一区| 欧美调教femdomvk| 国内精品视频666| 欧美一级理论性理论a| 日韩毛片在线免费观看| 欧美日韩免费在线视频| 国产一区欧美日韩| 亚洲一区二区三区视频在线播放| 成人黄色一级视频| 亚洲成人久久影院| 欧美无砖砖区免费| 国产美女精品一区二区三区| 亚洲欧美成人一区二区三区| 不卡视频免费播放| 日日夜夜免费精品视频| 中文字幕亚洲区| 99麻豆久久久国产精品免费优播| 亚洲大片一区二区三区| 国产香蕉久久精品综合网| 国产一区二区调教| 亚洲一区av在线| 久久久久久久久久电影| 国产精品1024久久| 中文字幕欧美日韩一区| 欧美一区二区三区在线电影| 岛国一区二区在线观看| 免费在线观看一区二区三区| 欧美一级免费观看| 色综合久久88色综合天天| 国产福利一区在线| 免费成人小视频| 午夜精品爽啪视频| 亚洲伦理在线免费看| 国产嫩草影院久久久久| 欧美sm美女调教| 欧美精品一二三| 欧美日韩一区二区在线视频| av亚洲精华国产精华精| 婷婷成人激情在线网| 欧美亚洲动漫精品| 成人中文字幕电影| 激情丁香综合五月| 毛片基地黄久久久久久天堂| 亚洲国产综合人成综合网站| 亚洲三级在线免费| 亚洲视频免费看| 国产精品免费视频观看| 99久久精品费精品国产一区二区| 九九九精品视频| 精品在线播放免费| 国产一区二区三区综合| 久久黄色级2电影| 美女视频第一区二区三区免费观看网站| 一区av在线播放| 亚洲一线二线三线视频| 一区二区三区免费网站| 亚洲欧美另类小说| 亚洲欧美另类久久久精品2019| 自拍偷自拍亚洲精品播放| 中文成人综合网| 1区2区3区国产精品| 综合精品久久久| 亚洲精品日产精品乱码不卡| 亚洲制服丝袜在线| 日韩经典中文字幕一区| 青娱乐精品在线视频| 蜜桃av一区二区| 麻豆91在线观看| 国产精品123区| 91在线丨porny丨国产| 色一情一乱一乱一91av| 欧美又粗又大又爽| 国产中文字幕一区| 国产成人综合网站| 91浏览器入口在线观看| 在线国产电影不卡| 这里只有精品99re| 国产婷婷一区二区| 中文字幕在线一区免费| 一级日本不卡的影视| 午夜久久久久久电影| 国产在线播精品第三| 99久久99久久精品免费看蜜桃| 91麻豆免费观看| 欧美图区在线视频| 亚洲精品一区二区三区四区高清| 欧美色图在线观看| 欧美大片顶级少妇| 中文欧美字幕免费| 香蕉影视欧美成人| 国产精一品亚洲二区在线视频| 成人av在线一区二区三区| 欧美探花视频资源| 精品免费视频一区二区| 亚洲久草在线视频| 精品一区二区三区久久| 色网站国产精品| 久久欧美中文字幕| 亚洲精品国产品国语在线app| 老汉av免费一区二区三区| 91色视频在线| 久久综合999| 视频一区视频二区中文| 成人午夜碰碰视频| 欧美一级欧美三级| 亚洲一区二区在线观看视频| 国产成人精品影院| 日韩一区二区免费在线电影| 综合亚洲深深色噜噜狠狠网站| 日本美女一区二区| 91免费观看视频| 2017欧美狠狠色| 日韩主播视频在线| 91美女在线看| 久久午夜国产精品| 日韩高清国产一区在线| 97成人超碰视| 国产亚洲女人久久久久毛片| 人人超碰91尤物精品国产| 在线观看免费亚洲| 亚洲欧美自拍偷拍| 成人精品视频.| 久久综合色8888| 美女性感视频久久| 欧美一个色资源| 日韩av网站在线观看| 欧美三级三级三级| 亚洲综合图片区| 色综合色综合色综合色综合色综合| 久久久亚洲国产美女国产盗摄| 奇米四色…亚洲| 欧美一级黄色大片| 日本午夜一区二区| 51精品国自产在线| 婷婷一区二区三区| 欧美日韩午夜在线视频| 亚洲二区在线观看| 91精品欧美久久久久久动漫| 亚洲超碰97人人做人人爱| 欧美在线一区二区三区| 一区二区三区自拍| 欧美手机在线视频| 午夜精品久久久久久久99樱桃|