📄 demoview.cpp
字号:
defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
for(int i=0;i<25;i++)
mask[i]=m[i];
maskSize=5;
}
}
int i, count=0;
for(i=0;i<25;i++){
if(mask[i]==1)
count++;
}
if(count==0)
{
::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
return;
}
unsigned char *lpOut=new unsigned char [height*lineByte];
GrayDilation((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
::memcpy(lpIn,lpOut,height*lineByte);
::GlobalUnlock(dib);
delete []lpOut;
// pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
void CDemoView::OnGrayOpen()
{
CDemoDoc *pDoc=GetDocument();
HDIB dib=pDoc->GetHDIB();
if(dib==NULL)
{
::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
return;
}
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
int width=phead->biWidth;
int height=phead->biHeight;
int biBitCount = phead->biBitCount/8;
if(biBitCount==3)//不处理彩色图像
{
::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
::GlobalUnlock(dib);
return;
}
int lineByte=(width * biBitCount+3)/4*4;
unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);
morphologyDlg dlg;
if(dlg.DoModal()!=IDOK){
::GlobalUnlock(dib);
return;
}
int mask[25]={0}, maskSize=5;
if(dlg.m_maskSelect==0){
mask[6]=1, mask[7]=1, mask[8]=1;
mask[11]=1, mask[12]=1, mask[13]=1;
mask[16]=1, mask[17]=1, mask[18]=1;
}
else{
DefineMaskDlg defDlg;
if(defDlg.DoModal()==IDOK){
int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
for(int i=0;i<25;i++)
mask[i]=m[i];
maskSize=5;
}
}
int i, count=0;
for(i=0;i<25;i++){
if(mask[i]==1)
count++;
}
if(count==0)
{
::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
return;
}
unsigned char *lpOut=new unsigned char [height*lineByte];
GrayErosion((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
GrayDilation((LPBYTE)lpOut,(LPBYTE)lpIn,width,height,mask);
::GlobalUnlock(dib);
delete []lpOut;
// pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
void CDemoView::OnGreyClose()
{
CDemoDoc *pDoc=GetDocument();
HDIB dib=pDoc->GetHDIB();
if(dib==NULL)
{
::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
return;
}
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
int width=phead->biWidth;
int height=phead->biHeight;
int biBitCount = phead->biBitCount/8;
if(biBitCount==3)//不处理彩色图像
{
::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
::GlobalUnlock(dib);
return;
}
int lineByte=(width * biBitCount+3)/4*4;
unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);
morphologyDlg dlg;
if(dlg.DoModal()!=IDOK){
::GlobalUnlock(dib);
return;
}
int mask[25]={0}, maskSize=5;
if(dlg.m_maskSelect==0){
mask[6]=1, mask[7]=1, mask[8]=1;
mask[11]=1, mask[12]=1, mask[13]=1;
mask[16]=1, mask[17]=1, mask[18]=1;
}
else{
DefineMaskDlg defDlg;
if(defDlg.DoModal()==IDOK){
int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
for(int i=0;i<25;i++)
mask[i]=m[i];
maskSize=5;
}
}
int i, count=0;
for(i=0;i<25;i++){
if(mask[i]==1)
count++;
}
if(count==0)
{
::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
return;
}
unsigned char *lpOut=new unsigned char [height*lineByte];
GrayDilation((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
GrayErosion((LPBYTE)lpOut,(LPBYTE)lpIn,width,height,mask);
::GlobalUnlock(dib);
delete []lpOut;
// pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
void CDemoView::OnMorphologyGrad()
{
CDemoDoc *pDoc=GetDocument();
HDIB dib=pDoc->GetHDIB();
if(dib==NULL)
{
::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
return;
}
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
int width=phead->biWidth;
int height=phead->biHeight;
int biBitCount = phead->biBitCount/8;
if(biBitCount==3)//不处理彩色图像
{
::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
::GlobalUnlock(dib);
return;
}
int lineByte=(width * biBitCount+3)/4*4;
unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);
morphologyDlg dlg;
if(dlg.DoModal()!=IDOK){
::GlobalUnlock(dib);
return;
}
int mask[25]={0}, maskSize=5;
if(dlg.m_maskSelect==0){
mask[6]=1, mask[7]=1, mask[8]=1;
mask[11]=1, mask[12]=1, mask[13]=1;
mask[16]=1, mask[17]=1, mask[18]=1;
}
else{
DefineMaskDlg defDlg;
if(defDlg.DoModal()==IDOK){
int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
for(int i=0;i<25;i++)
mask[i]=m[i];
maskSize=5;
}
}
int i, count=0;
for(i=0;i<25;i++){
if(mask[i]==1)
count++;
}
if(count==0)
{
::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
return;
}
unsigned char *lpOut=new unsigned char [height*lineByte];
MorphGrad((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
// ::memcpy(lpIn,lpOut,height*lineByte);
int newLineByte=lineByte;
int palSize=::PaletteSize((LPSTR)lpDIB);
HANDLE dibNew=::GlobalAlloc(GHND, sizeof(BITMAPINFOHEADER)+ palSize+height*newLineByte);
LPSTR lpDIBNew = (LPSTR) ::GlobalLock(dibNew);
::memcpy((unsigned char*)lpDIBNew, (unsigned char*)lpDIB, sizeof(BITMAPINFOHEADER)+ palSize);
BITMAPINFOHEADER *info=(BITMAPINFOHEADER*)lpDIBNew;
info->biHeight=height;
info->biWidth=width;
unsigned char *lpDIBBitsNew=(unsigned char *)::FindDIBBits(lpDIBNew);
for(i=0;i<height*newLineByte;i++){
*(lpDIBBitsNew+i)=lpOut[i];
}
::GlobalUnlock(dib);
::GlobalUnlock(dibNew);
CMainFrame* pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
pFrame->SendMessage(WM_COMMAND, ID_FILE_NEW);
CDemoView* pView=(CDemoView*)pFrame->MDIGetActive()->GetActiveView();
CDemoDoc* pDocNew=pView->GetDocument();
pDocNew->ReplaceHDIB((HDIB)dibNew);
pDocNew->InitDIBData();
pDocNew->UpdateAllViews(pView);
delete []lpOut;
Invalidate();
}
void CDemoView::OnTopHatPeak()
{
CDemoDoc *pDoc=GetDocument();
HDIB dib=pDoc->GetHDIB();
if(dib==NULL)
{
::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
return;
}
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
int width=phead->biWidth;
int height=phead->biHeight;
int biBitCount = phead->biBitCount/8;
if(biBitCount==3)//不处理彩色图像
{
::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
::GlobalUnlock(dib);
return;
}
int lineByte=(width * biBitCount+3)/4*4;
unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);
morphologyDlg dlg;
if(dlg.DoModal()!=IDOK){
::GlobalUnlock(dib);
return;
}
int mask[25]={0}, maskSize=5;
if(dlg.m_maskSelect==0){
mask[6]=1, mask[7]=1, mask[8]=1;
mask[11]=1, mask[12]=1, mask[13]=1;
mask[16]=1, mask[17]=1, mask[18]=1;
}
else{
DefineMaskDlg defDlg;
if(defDlg.DoModal()==IDOK){
int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
for(int i=0;i<25;i++)
mask[i]=m[i];
maskSize=5;
}
}
int i, count=0;
for(i=0;i<25;i++){
if(mask[i]==1)
count++;
}
if(count==0)
{
::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
return;
}
unsigned char *lpOut=new unsigned char [height*lineByte];
TopHatPeak((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
::memcpy(lpIn,lpOut,height*lineByte);
::GlobalUnlock(dib);
delete []lpOut;
// pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
void CDemoView::OnTopHatVally()
{
CDemoDoc *pDoc=GetDocument();
HDIB dib=pDoc->GetHDIB();
if(dib==NULL)
{
::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
return;
}
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
int width=phead->biWidth;
int height=phead->biHeight;
int biBitCount = phead->biBitCount/8;
if(biBitCount==3)//不处理彩色图像
{
::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
::GlobalUnlock(dib);
return;
}
int lineByte=(width * biBitCount+3)/4*4;
unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);
morphologyDlg dlg;
if(dlg.DoModal()!=IDOK){
::GlobalUnlock(dib);
return;
}
int mask[25]={0}, maskSize=5;
if(dlg.m_maskSelect==0){
mask[6]=1, mask[7]=1, mask[8]=1;
mask[11]=1, mask[12]=1, mask[13]=1;
mask[16]=1, mask[17]=1, mask[18]=1;
}
else{
DefineMaskDlg defDlg;
if(defDlg.DoModal()==IDOK){
int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
for(int i=0;i<25;i++)
mask[i]=m[i];
maskSize=5;
}
}
int i, count=0;
for(i=0;i<25;i++){
if(mask[i]==1)
count++;
}
if(count==0)
{
::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
return;
}
unsigned char *lpOut=new unsigned char [height*lineByte];
TopHatVally((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
::memcpy(lpIn,lpOut,height*lineByte);
::GlobalUnlock(dib);
delete []lpOut;
// pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
void CDemoView::OnTophatPeakVally()
{
CDemoDoc *pDoc=GetDocument();
HDIB dib=pDoc->GetHDIB();
if(dib==NULL)
{
::MessageBox(0,"请打开原始图像!",NULL,MB_OK);
return;
}
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) dib);
LPBITMAPINFOHEADER phead=(LPBITMAPINFOHEADER)lpDIB;
int width=phead->biWidth;
int height=phead->biHeight;
int biBitCount = phead->biBitCount/8;
if(biBitCount==3)//不处理彩色图像
{
::MessageBox(0,"不处理彩色图像!",NULL,MB_OK);
::GlobalUnlock(dib);
return;
}
int lineByte=(width * biBitCount+3)/4*4;
unsigned char *lpIn=(unsigned char *)::FindDIBBits(lpDIB);
morphologyDlg dlg;
if(dlg.DoModal()!=IDOK){
::GlobalUnlock(dib);
return;
}
int mask[25]={0}, maskSize=5;
if(dlg.m_maskSelect==0){
mask[6]=1, mask[7]=1, mask[8]=1;
mask[11]=1, mask[12]=1, mask[13]=1;
mask[16]=1, mask[17]=1, mask[18]=1;
}
else{
DefineMaskDlg defDlg;
if(defDlg.DoModal()==IDOK){
int m[25]={defDlg.m_maskEdit1, defDlg.m_maskEdit2, defDlg.m_maskEdit3, defDlg.m_maskEdit4, defDlg.m_maskEdit5,
defDlg.m_maskEdit6, defDlg.m_maskEdit7, defDlg.m_maskEdit8, defDlg.m_maskEdit9, defDlg.m_maskEdit10,
defDlg.m_maskEdit11, defDlg.m_maskEdit12, defDlg.m_maskEdit13, defDlg.m_maskEdit14, defDlg.m_maskEdit15,
defDlg.m_maskEdit16, defDlg.m_maskEdit17, defDlg.m_maskEdit18, defDlg.m_maskEdit19, defDlg.m_maskEdit20,
defDlg.m_maskEdit21, defDlg.m_maskEdit22, defDlg.m_maskEdit23, defDlg.m_maskEdit24, defDlg.m_maskEdit25};
for(int i=0;i<25;i++)
mask[i]=m[i];
maskSize=5;
}
}
int i, count=0;
for(i=0;i<25;i++){
if(mask[i]==1)
count++;
}
if(count==0)
{
::MessageBox(0," 模板参数不能全为0!",NULL,MB_OK);
return;
}
unsigned char *lpOut=new unsigned char [height*lineByte];
TopHatVally((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
::memcpy(lpIn,lpOut,height*lineByte);
::GlobalUnlock(dib);
delete []lpOut;
// pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -