📄 chap03.htm
字号:
<p style='line-height:18.0pt'>HLOCAL
hTempImgData;</p>
<p style='line-height:18.0pt'>LPBITMAPINFOHEADER lpTempImgData;</p>
<p style='line-height:18.0pt'>LPSTR
lpTempPtr;</p>
<p style='line-height:18.0pt'>HDC
hDc;</p>
<p style='line-height:18.0pt'>HFILE
hf;</p>
<p style='line-height:18.0pt'>LONG
x,y;</p>
<p style='line-height:18.0pt'>int
g,g1,g2,g3;</p>
<p style='line-height:18.0pt'><span
lang=EN-US>//OffBits</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>为</span><span
lang=EN-US>BITMAPINFOHEADER</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>结构长度加调色板的大小</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>BufSize=OffBits+bi.biHeight*LineBytes;//</span><span
style='font-family:宋体;"Times New Roman"'>要开的缓冲区的大小</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>{</span></p>
<p style='line-height:
18.0pt'><span lang=EN-US>MessageBox(hWnd,"Error alloc memory!","Error
Message",MB_OK|</span></p>
<p style='line-height:
18.0pt'><span lang=EN-US>MB_ICONEXCLAMATION);</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>return FALSE;</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>}</span></p>
<p style='line-height:18.0pt'>lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
</p>
<p style='line-height:18.0pt'><span
lang=EN-US>lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>//</span><span style='font-family:宋体;
"Times New Roman"'>拷贝头信息及位图数据</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>memcpy(lpTempImgData,lpImgData,BufSize);</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>//</span><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><span style='font-family:宋体;
"Times New Roman"'>,</span><span lang=EN-US>x</span><span
style='font-family:宋体;"Times New Roman"'>类似</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>for(y=1;y<bi.biHeight-1;y++)</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>
</span>lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes)+x;</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)+x;</span></p>
<p style='line-height:18.0pt'><span>
</span>g2=(unsigned char)*(lpPtr);</p>
<p style='line-height:18.0pt'><span>
</span>if(Hori){ //<span style='font-family:宋体;
"Times New Roman"'>水平方向</span></p>
<p style='line-height:18.0pt'><span>
</span>g1=(unsigned char)*(lpPtr-1); //<span style='font-family:宋体;"Times New Roman";"Times New Roman"'>左邻点</span></p>
<p style='line-height:18.0pt'><span>
</span>g3=(unsigned char)*(lpPtr+1); //<span style='font-family:宋体;"Times New Roman";"Times New Roman"'>右邻点</span></p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:18.0pt'><span>
</span>else{ //<span style='font-family:宋体;
"Times New Roman"'>垂直方向</span></p>
<p style='line-height:18.0pt'><span> </span>
g1=(unsigned char)*(lpPtr+LineBytes); //<span style='font-family:宋体;"Times New Roman";"Times New Roman"'>上邻点</span></p>
<p style='line-height:18.0pt'><span>
</span>g3=(unsigned char)*(lpPtr-LineBytes); //<span style='font-family:宋体;"Times New Roman";"Times New Roman"'>下邻点</span></p>
<p style='line-height:18.0pt'><span>
</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(g1>g2){</p>
<p style='line-height:18.0pt'><span>
</span>if(g2>g3) g=g2;</p>
<p style='line-height:18.0pt'><span>
</span>else{</p>
<p style='line-height:18.0pt'><span>
</span>if(g1>g3) g=g3;</p>
<p style='line-height:18.0pt'><span>
</span>else g=g1;</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>else{ //g1<=g2</p>
<p style='line-height:18.0pt'><span>
</span>if(g1>g3) g=g1;</p>
<p style='line-height:18.0pt'><span>
</span>else{ </p>
<p style='line-height:18.0pt'><span>
</span>if(g2>g3) g=g3;</p>
<p style='line-height:18.0pt'><span>
</span>else g=g2;</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>*lpTempPtr=(BYTE)g; //<span style='font-family:宋体;
"Times New Roman"'>存入新的缓冲区内</span></p>
<p style='line-height:18.0pt'><span>
</span>}</p>
<p style='line-height:18.0pt'><span
lang=EN-US>hDc=GetDC(hWnd);</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>//<span
style='font-family:宋体;"Times New Roman"'>产生新的位图</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData,</span></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 lang=EN-US>NumColors*sizeof(RGBQUAD),</span></p>
<p style='line-height:
18.0pt'><span> </span>
(LPBITMAPINFO)lpTempImgData,</p>
<p style='line-height:
18.0pt'><span lang=EN-US>DIB_RGB_COLORS);</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>if(Hori) //</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>取不同的结果文件名</span></p>
<p style='line-height:18.0pt'><span>
</span>hf=_lcreat("c:\\hmedian.bmp",0);</p>
<p style='line-height:18.0pt'><span> </span>else</p>
<p style='line-height:18.0pt'><span>
</span>hf=_lcreat("c:\\vmedian.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
lang=EN-US>//</span><span style='font-family:宋体;
"Times New Roman"'>释放内存及资源</span></p>
<p style='line-height:18.0pt'><span> </span> ReleaseDC(hWnd,hDc);</p>
<p style='line-height:18.0pt'><span> </span>LocalUnlock(hTempImgData);</p>
<p style='line-height:18.0pt'><span> </span>LocalFree(hTempImgData);</p>
<p style='line-height:18.0pt'><span> </span>GlobalUnlock(hImgData);</p>
<p style='line-height:18.0pt'><span> </span>return
TRUE;</p>
<p style='line-height:18.0pt'><span lang=EN-US>}</span></p>
<h2> <span
lang=EN-US>3.3</span> <span lang=EN-US> </span><a name="_Toc486331876"></a><a
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -