📄 linjunjuandoc.cpp
字号:
BOOL CLinjunjuanDoc::SaveHistory()
{
//if (Historystep<9)
{
if (Historystep!=dealnum)
{
for (int i=Historystep+1;i<=dealnum;i++)
{
dspace_2d(History[i].p,History[i].row,History[i].col);
History[i].p=NULL;
}
dealnum=Historystep;
}
Historystep++;
dealnum++;
History[Historystep].row=orgpic.row;
History[Historystep].col=orgpic.col;
History[Historystep].p= fspace_2d(History[Historystep].row,History[Historystep].col);
if (History[Historystep].p==NULL)
{
AfxMessageBox("历史记录错误");
for (int i=0; i<Historystep;i++)
{
dspace_2d(History[i].p,History[i].row,History[i].col);
return FALSE;
}
}
for (int i=0;i<History[Historystep].row;i++)
for (int j=0;j<History[Historystep].col;j++)
{
History[Historystep].p[i][j]=orgpic.p[i][j];
}
}
//else
{
// dspace_2d(History[i].p,History[i].row,History[i].col);
}
return TRUE;
}
void CLinjunjuanDoc::OnBack()
{
if (Historystep>0)
{
Historystep--;
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic.row=History[Historystep].row;
orgpic.col=History[Historystep].col;
orgpic.p=fspace_2d(orgpic.row,orgpic.col);
if (orgpic.p==NULL)
return;
for (int i=0;i<History[Historystep].row;i++)
for (int j=0;j<History[Historystep].col;j++)
{
orgpic.p[i][j]=History[Historystep].p[i][j];
}
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
InitDIBData();
UpdateAllViews(NULL);
}
}
void CLinjunjuanDoc::OnFoward()
{
if (Historystep<10&&Historystep<dealnum)
{
Historystep++;
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic.row=History[Historystep].row;
orgpic.col=History[Historystep].col;
orgpic.p=fspace_2d(orgpic.row,orgpic.col);
if (orgpic.p==NULL)
return;
for (int i=0;i<History[Historystep].row;i++)
for (int j=0;j<History[Historystep].col;j++)
{
orgpic.p[i][j]=History[Historystep].p[i][j];
}
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
InitDIBData();
UpdateAllViews(NULL);
}
}
void CLinjunjuanDoc::OnUpdateBack(CCmdUI* pCmdUI)
{
if (Historystep>0)
{
pCmdUI->Enable(TRUE);
}
else
pCmdUI->Enable(FALSE);
}
void CLinjunjuanDoc::OnUpdateFoward(CCmdUI* pCmdUI)
{
if (Historystep<10&&Historystep<dealnum)
{
pCmdUI->Enable(TRUE);
}
else
pCmdUI->Enable(FALSE);
}
void CLinjunjuanDoc::OnNoiseGass()
{
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
CGASSDIALOG dlg;
if (dlg.DoModal()==IDOK)
{
dealpic.row=orgpic.row;
dealpic.col=orgpic.col;
if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
{
AfxMessageBox("分配空间错误!");
return;
}
ImageAddGuassNoise(orgpic,dealpic,dlg.m_mean,dlg.m_deviate);
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic=dealpic;
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
SaveHistory();
InitDIBData();
UpdateAllViews(NULL);
}
else return;
}
void CLinjunjuanDoc::OnRotate90Closewise()
{
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
int theta=90;
BOOL wise=FALSE;
BYTE bkground=255;
dealpic.p=(unsigned char **)ImgRotate(orgpic ,dealpic.row,dealpic.col,theta,wise,bkground);
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic=dealpic;
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
SaveHistory();
InitDIBData();
UpdateAllViews(NULL);
}
void CLinjunjuanDoc::OnRotate90Noclockwise()
{
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
int theta=90;
BOOL wise=TRUE;
BYTE bkground=255;
dealpic.p=(unsigned char **)ImgRotate(orgpic ,dealpic.row,dealpic.col,theta,wise,bkground);
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic=dealpic;
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
SaveHistory();
InitDIBData();
UpdateAllViews(NULL);
}
void CLinjunjuanDoc::OnRotate180()
{
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
int theta=180;
BOOL wise=FALSE;
BYTE bkground=255;
dealpic.p=(unsigned char **)ImgRotate(orgpic ,dealpic.row,dealpic.col,theta,wise,bkground);
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic=dealpic;
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
SaveHistory();
InitDIBData();
UpdateAllViews(NULL);
}
void CLinjunjuanDoc::OnRotateFree()
{
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
CROTATEDIALOG dlg;
if (dlg.DoModal()==IDOK)
{
dealpic.p=(unsigned char **)ImgRotate(orgpic ,dealpic.row,dealpic.col,dlg.m_corner,dlg.m_clockwise,dlg.m_fillgray);
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic=dealpic;
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
SaveHistory();
InitDIBData();
flagsmall_big=TRUE;
UpdateAllViews(NULL);
}
else return;
}
void CLinjunjuanDoc::OnRotateH()
{
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
dealpic.row=orgpic.row;
dealpic.col=orgpic.col;
if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
{
AfxMessageBox("分配空间错误!");
return;
}
for(int i=0;i<orgpic.row;i++)
for(int j=0;j<orgpic.col;j++)
{
dealpic.p[i][orgpic.col-j-1]=orgpic.p[i][j];
}
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic=dealpic;
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
SaveHistory();
InitDIBData();
UpdateAllViews(NULL);
return;
}
void CLinjunjuanDoc::OnRotateV()
{
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
dealpic.row=orgpic.row;
dealpic.col=orgpic.col;
if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
{
AfxMessageBox("分配空间错误!");
return;
}
for(int i=0;i<orgpic.row;i++)
for(int j=0;j<orgpic.col;j++)
{
dealpic.p[orgpic.row-i-1][j]=orgpic.p[i][j];
}
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic=dealpic;
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
SaveHistory();
InitDIBData();
UpdateAllViews(NULL);
return;
}
void CLinjunjuanDoc::OnLog()
{
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
CLOG dlg;
if (dlg.DoModal()==IDOK)
{
dealpic.row=orgpic.row;
dealpic.col=orgpic.col;
if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
{
AfxMessageBox("分配空间错误!");
return;
}
Log(dlg.m_log_k,dlg.m_log_sigma,orgpic,dealpic);
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic=dealpic;
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
SaveHistory();
InitDIBData();
UpdateAllViews(NULL);
}
else return;
}
void CLinjunjuanDoc::OnLayer8()
{
CExtractionDialog dlg;
dlg.m_input_filename=GetPathName();
if(dlg.DoModal()==IDOK)
{
Extraction8(dlg.m_input_filename,dlg.m_output_filename);
}
}
void CLinjunjuanDoc::OnSub()
{
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
dealpic.row=orgpic.row;
dealpic.col=orgpic.col;
if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
{
AfxMessageBox("分配空间错误!");
return;
}
for (int i=0;i<dealpic.row;i++)
for (int j=0;j<dealpic.col-5;j++)
{
dealpic.p[i][j]=abs(orgpic.p[i][j]-orgpic.p[i][j+5]);
}
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic=dealpic;
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
SaveHistory();
InitDIBData();
UpdateAllViews(NULL);
return;
}
void CLinjunjuanDoc::OnProproSusan()
{
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
dealpic.row=orgpic.row;
dealpic.col=orgpic.col;
if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
{
AfxMessageBox("分配空间错误!");
return;
}
unsigned char *in, *bp, *mid;
int i,j;
// unsigned char **img;
int *r;
// int argindex=3;
static int bt=20;
static float dt=4.0;
static bool principle=0;
static bool thin_post_proc=1;
static bool three_by_three=0;
static bool drawing_mode=0;
static bool susan_quick=0;
static int mode = 0;
int max_no_corners=1850;
int max_no_edges=2650;
int x_size, y_size;
CORNER_LIST corner_list;
// int bt=20;
// int three_by_three=0;
// int x_size, y_size;
CSUSANDLG SusanDlg;
SusanDlg.m_brightnessthreshold = bt;
SusanDlg.m_distancethreshold = dt;
SusanDlg.m_principle = principle;
SusanDlg.m_susan_quick = susan_quick;
SusanDlg.m_drawing_mode = drawing_mode;
SusanDlg.m_three_by_three = three_by_three;
SusanDlg.m_mode = mode;
SusanDlg.m_thin_post_proc = thin_post_proc;
if(SusanDlg.DoModal()!=IDOK) return;
bt = SusanDlg.m_brightnessthreshold;
dt = SusanDlg.m_distancethreshold;
principle = SusanDlg.m_principle;
susan_quick = SusanDlg.m_susan_quick;
drawing_mode = SusanDlg.m_drawing_mode;
three_by_three = SusanDlg.m_three_by_three;
mode = SusanDlg.m_mode;
thin_post_proc = SusanDlg.m_thin_post_proc;
in = new unsigned char[(long)orgpic.row*orgpic.col];
for(i=0; i<orgpic.row; i++)
for(j=0; j<orgpic.col; j++) in[i*orgpic.col+j] = orgpic.p[i][j];
x_size = orgpic.col;
y_size = orgpic.row;
susan(in,x_size,y_size,corner_list,mode,bt,dt,principle,
thin_post_proc,three_by_three,drawing_mode,susan_quick);
for(i=0; i<dealpic.row; i++)
for(j=0; j<dealpic.col; j++) dealpic.p[i][j]=in[i*dealpic.col+j];
delete [] in;
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic=dealpic;
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
SaveHistory();
InitDIBData();
UpdateAllViews(NULL);
return;
}
void CLinjunjuanDoc::OnProproHof()
{
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
dealpic.row=orgpic.row;
dealpic.col=orgpic.col;
if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
{
AfxMessageBox("分配空间错误!");
return;
}
HOF(orgpic.p,dealpic.p,dealpic.row,dealpic.col);
dspace_2d(orgpic.p,orgpic.row,orgpic.col);
orgpic=dealpic;
if ((m_hDIB=ChangeToHDIB(orgpic))==NULL)
{
AfxMessageBox("不能显示!");
return ;
}
SaveHistory();
InitDIBData();
UpdateAllViews(NULL);
return;
}
void CLinjunjuanDoc::OnMorphErosion()
{
//腐蚀运算
// 获取文档
if (!flagpic)
{
AfxMessageBox("没有输入图象!");
return;
}
dealpic.row=orgpic.row;
dealpic.col=orgpic.col;
if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
{
AfxMessageBox("分配空间错误!");
return;
}
// 指向DIB的指针
LPSTR lpDIB;
// 指向DIB象素指针
LPSTR lpDIBBits;
// 锁定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) ChangeToHDIB(orgpic));
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的腐蚀,其它的可以类推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用户
AfxMessageBox("目前只支持256色位图的腐蚀!", /*"系统提示" ,*/ MB_ICONINFORMATION | MB_OK);
// 解除锁定
::GlobalUnlock((HGLOBAL)ChangeToHDIB(orgpic));
// 返回
return;
}
int nMode;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -