📄 demoview.cpp
字号:
int lineByte2=(w * b+3)/4*4;
unsigned char *lpOut1=new unsigned char [h*lineByte2];
PointEqual((LPBYTE)lpIn,(LPBYTE)lpOut1,w,h,0);
::memcpy(lpIn,lpOut1,h*lineByte2);
::GlobalUnlock(dib);
pDoc->SetModifiedFlag(TRUE);
delete []lpOut1;
}
else{
::MessageBox(0,"只处理彩色图象!",MB_OK,0);
}
::GlobalUnlock(dib);
Invalidate();
}
void CDemoView::OnErosionErzhi()
{
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);
int gray;
for(int i=0;i<height;i++)//判断是否是二值图像
{
for(int j=0;j<lineByte;j++)
{
gray=*(lpIn+i*lineByte+j);
if(gray!=0&&gray!=255)
{
::MessageBox(0,"不是二值的图像!",NULL,MB_OK);
::GlobalUnlock(dib);
return;
}
}
}
morphologyDlg dlg;
if(dlg.DoModal()!=IDOK){
::GlobalUnlock(dib);
return;
}
int mask[25]={0}, maskSize=5;
if(dlg.m_maskSelect==0){
mask[7]=1;
mask[11]=1;
mask[12]=1;
mask[13]=1;
mask[17]=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(i=0;i<25;i++)
mask[i]=m[i];
maskSize=5;
}
}
int 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];
Terode((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
::memcpy(lpIn,lpOut,height*lineByte);
::GlobalUnlock(dib);
delete []lpOut;
// pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
void CDemoView::OnErzhiExpand()
{
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);
int gray;
for(int i=0;i<height;i++)//判断是否是二值图像
{
for(int j=0;j<lineByte;j++)
{
gray=*(lpIn+i*lineByte+j);
if(gray!=0&&gray!=255)
{
::MessageBox(0,"不是二值的图像!",NULL,MB_OK);
::GlobalUnlock(dib);
return;
}
}
}
morphologyDlg dlg;
if(dlg.DoModal()!=IDOK){
::GlobalUnlock(dib);
return;
}
int mask[25]={0}, maskSize=5;
if(dlg.m_maskSelect==0){
mask[7]=1;
mask[11]=1;
mask[12]=1;
mask[13]=1;
mask[17]=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(i=0;i<25;i++)
mask[i]=m[i];
maskSize=5;
}
}
int 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];
Texpand((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
::memcpy(lpIn,lpOut,height*lineByte);
::GlobalUnlock(dib);
delete []lpOut;
// pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
void CDemoView::OnErzhiOpen()
{
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);
int gray;
for(int i=0;i<height;i++)//判断是否是二值图像
{
for(int j=0;j<lineByte;j++)
{
gray=*(lpIn+i*lineByte+j);
if(gray!=0&&gray!=255)
{
::MessageBox(0,"不是二值的图像!",NULL,MB_OK);
::GlobalUnlock(dib);
return;
}
}
}
morphologyDlg dlg;
if(dlg.DoModal()!=IDOK){
::GlobalUnlock(dib);
return;
}
int mask[25]={0}, maskSize=5;
if(dlg.m_maskSelect==0){
mask[7]=1;
mask[11]=1;
mask[12]=1;
mask[13]=1;
mask[17]=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(i=0;i<25;i++)
mask[i]=m[i];
maskSize=5;
}
}
int 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];
Terode((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
Texpand((LPBYTE)lpOut,(LPBYTE)lpIn,width,height,mask);
::GlobalUnlock(dib);
delete []lpOut;
// pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
void CDemoView::OnErzhClose()
{
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);
int gray;
for(int i=0;i<height;i++)//判断是否是二值图像
{
for(int j=0;j<lineByte;j++)
{
gray=*(lpIn+i*lineByte+j);
if(gray!=0&&gray!=255)
{
::MessageBox(0,"不是二值的图像!",NULL,MB_OK);
::GlobalUnlock(dib);
return;
}
}
}
morphologyDlg dlg;
if(dlg.DoModal()!=IDOK){
::GlobalUnlock(dib);
return;
}
int mask[25]={0}, maskSize=5;
if(dlg.m_maskSelect==0){
mask[7]=1;
mask[11]=1;
mask[12]=1;
mask[13]=1;
mask[17]=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(i=0;i<25;i++)
mask[i]=m[i];
maskSize=5;
}
}
int 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];
Texpand((LPBYTE)lpIn,(LPBYTE)lpOut,width,height,mask);
Terode((LPBYTE)lpOut,(LPBYTE)lpIn,width,height,mask);
::GlobalUnlock(dib);
delete []lpOut;
// pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
void CDemoView::OnGrayErose()
{
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);
::memcpy(lpIn,lpOut,height*lineByte);
::GlobalUnlock(dib);
delete []lpOut;
// pDoc->SetModifiedFlag(TRUE);
Invalidate();
}
void CDemoView::OnGrayExpand()
{
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,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -