void CZHANGMIN1View::OnMmf()
{
//N*N最大值滤波
CZHANGMIN1Doc* pDoc = GetDocument();
int iH,iW;
LPSTR lpDIB;
LPSTR lpDIBBits;
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());// 找到DIB图像象素起始位置
if (::DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位图的运算!", "系统提示" , MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
BeginWaitCursor();
lpDIBBits = ::FindDIBBits(lpDIB);
iH = ::DIBHeight(lpDIB);
iW = ::DIBWidth(lpDIB);
int yy,xx,n2,nn,m,madomax,mado[1000];
int n=5;
n2=(n-1)/2;//2
nn=n*n;//25
//n*n最大值频率滤波
for(int j=n2;j<iH-n2;j++)
for(int i=n2;i<iW-n2;i++)
{
//把n*n屏蔽窗口部分复制到mado[m]
m=0;
for(yy=j-n2;yy<=j+n2;yy++)
for(xx=i-n2;xx<=i+n2;xx++)
{
mado[m]=lpDIBBits[yy*iW+xx];
m++;
}
//找出mado[m]中的最大值madomax,用作最大频率值
madomax=mado[0];
for(m=1;m<nn;m++)
if(madomax<mado[m])
madomax=mado[m];
lpDIBBits[j*iW+i]=madomax;
}
{
pDoc->SetModifiedFlag(TRUE);
pDoc->UpdateAllViews(NULL);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();