📄 chap06.htm
字号:
<p style='line-height:18.0pt'><span>
</span>//lpPtr<span
style='font-family:宋体;"Times New Roman"'>指向原图数据,</span><span lang=EN-US>lpTempPtr</span><span
style='font-family:宋体;"Times New Roman"'>指向新图数据</span></p>
<p style='line-height:18.0pt'><span>
</span>lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes)+1;</p>
<p style='line-height:18.0pt'><span>
</span>lpTempPtr=(char*)lpTempImgData+</p>
<p style='line-height:
18.0pt'><span lang=EN-US>(BufSize-LineBytes-y*LineBytes)+1;</span></p>
<p style='line-height:18.0pt'><span>
</span>for(x=1;x<bi.biWidth-1;x++){ </p>
<p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>注意为防止越界,</span><span
lang=EN-US>x</span><span style='font-family:宋体;
"Times New Roman"'>的范围从</span><span lang=EN-US>1</span><span
style='font-family:宋体;"Times New Roman"'>到宽度</span><span lang=EN-US>-2</span></p>
<p style='line-height:18.0pt'><span>
</span>num=(unsigned char)*lpPtr;</p>
<p style='line-height:18.0pt'><span>
</span>if (num==0){ //<span
style='font-family:宋体;"Times New Roman"'>因为腐蚀掉的是黑点,所以只对黑点处理</span></p>
<p style='line-height:18.0pt'><span>
</span>*lpTempPtr=(unsigned char)0; //<span
style='font-family:宋体;"Times New Roman"'>先置成黑点</span></p>
<p style='line-height:18.0pt'><span>
</span>for(i=0;i<3;i++){</p>
<p style='line-height:18.0pt'><span>
</span>num=(unsigned char)*(lpPtr+i-1);</p>
<p style='line-height:18.0pt'><span>
</span>if(num==255){ </p>
<p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>自身及上下邻居中若有一个不是黑点,则将该点腐</span></p>
<p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>蚀成白点</span></p>
<p style='line-height:18.0pt'><span>
</span>*lpTempPtr=(unsigned char)255;</p>
<p style='line-height:18.0pt'><span>
</span>break;</p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>原图中就是白点的,新图中仍是白点</span></p>
<p style='line-height:18.0pt'><span>
</span>else *lpTempPtr=(unsigned char)255; </p>
<p style='line-height:18.0pt'><span>
</span>//<span
style='font-family:宋体;"Times New Roman"'>指向下一个象素</span></p>
<p style='line-height:18.0pt'><span>
</span>lpPtr++; </p>
<p style='line-height:18.0pt'><span>
</span>lpTempPtr++;</p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:18.0pt'><span> </span>}</p>
<p style='line-height:18.0pt'><span
lang=EN-US>else{ </span></p>
<p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>在垂直方向进行腐蚀运算</span></p>
<p style='line-height:18.0pt'><span>
</span>for(y=1;y<bi.biHeight-1;y++){ //<span style='font-family:宋体;
"Times New Roman"'>注意为防止越界,</span><span lang=EN-US>y</span><span
style='font-family:宋体;"Times New Roman"'>的范围从</span><span lang=EN-US>1</span><span style='font-family:
宋体;"Times New Roman"'>到高度</span><span
lang=EN-US>-2</span></p>
<p style='line-height:18.0pt'><span>
</span>//lpPtr<span
style='font-family:宋体;"Times New Roman"'>指向原图数据,</span><span lang=EN-US>lpTempPtr</span><span
style='font-family:宋体;"Times New Roman"'>指向新图数据</span></p>
<p style='line-height:18.0pt'><span>
</span>lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);</p>
<p style='line-height:18.0pt'><span>
</span>lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);</p>
<p style='line-height:18.0pt'><span>
</span>for(x=0;x<bi.biWidth;x++){</p>
<p style='line-height:18.0pt'><span>
</span>num=(unsigned char)*lpPtr;</p>
<p style='line-height:18.0pt'><span>
</span>if (num==0){ //<span style='font-family:宋体;
"Times New Roman"'>因为腐蚀掉的是黑点,所以只对黑点处理</span></p>
<p style='line-height:18.0pt'><span>
</span>*lpTempPtr=(unsigned char)0; //<span style='font-family:宋体;
"Times New Roman"'>先置成黑点</span></p>
<p style='line-height:18.0pt'><span>
</span>for(i=0;i<3;i++){</p>
<p style='line-height:18.0pt'><span>
</span>num=(unsigned char)*(lpPtr+(i-1)*LineBytes);</p>
<p style='line-height:18.0pt'><span>
</span>if(num==255){</p>
<p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>自身及上下邻居中若有一个不是黑点,则将该点腐</span></p>
<p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>蚀成白点</span></p>
<p style='line-height:18.0pt'><span>
</span>*lpTempPtr=(unsigned char)255;</p>
<p style='line-height:18.0pt'><span>
</span>break;</p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>原图中就是白点的,新图中仍是白点</span></p>
<p style='line-height:18.0pt'><span>
</span>else *lpTempPtr=(unsigned char)255;</p>
<p style='line-height:18.0pt'><span>
</span>//<span
style='font-family:宋体;"Times New Roman"'>指向下一个象素</span></p>
<p style='line-height:18.0pt'><span>
</span>lpPtr++;</p>
<p style='line-height:18.0pt'><span>
</span>lpTempPtr++;</p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:18.0pt'><span> </span>}</p>
<p style='line-height:18.0pt'><span> </span>if(hBitmap!=NULL)</p>
<p style='line-height:18.0pt'><span> </span>
DeleteObject(hBitmap);</p>
<p style='line-height:18.0pt'><span> </span>hDc=GetDC(hWnd);
</p>
<p style='line-height:18.0pt'><span> </span>//<span
style='font-family:宋体;"Times New Roman"'>产生新的位图</span></p>
<p style='line-height:18.0pt'><span> </span>hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData,</p>
<p style='line-height:
18.0pt'><span lang=EN-US>(LONG)CBM_INIT,</span></p>
<p style='line-height:
18.0pt'><span lang=EN-US>(LPSTR)lpTempImgData+</span></p>
<p style='line-height:
18.0pt'><span lang=EN-US>sizeof(BITMAPINFOHEADER)+</span></p>
<p style='line-height:18.0pt'><span> </span>
NumColors*sizeof(RGBQUAD),</p>
<p style='line-height:18.0pt'><span
lang=EN-US>(LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS);</span></p>
<p style='line-height:18.0pt'><span> </span>//<span
style='font-family:宋体;"Times New Roman"'>起不同的结果文件名</span></p>
<p style='line-height:18.0pt'><span> </span>if(Hori)</p>
<p style='line-height:18.0pt'><span>
</span>hf=_lcreat("c:\\herosion.bmp",0);</p>
<p style='line-height:18.0pt'><span> </span>else</p>
<p style='line-height:18.0pt'><span>
</span>hf=_lcreat("c:\\verosion.bmp",0);</p>
<p style='line-height:18.0pt'><span> </span>_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));
</p>
<p style='line-height:18.0pt'><span> </span>_lwrite(hf,(LPSTR)lpTempImgData,BufSize);</p>
<p style='line-height:18.0pt'><span> </span>_lclose(hf);</p>
<p style='line-height:18.0pt'><span> </span>//<span
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -