?? linjunjuandoc.cpp
字號(hào):
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("歷史記錄錯(cuò)誤");
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("分配空間錯(cuò)誤!");
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("分配空間錯(cuò)誤!");
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("分配空間錯(cuò)誤!");
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("分配空間錯(cuò)誤!");
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("分配空間錯(cuò)誤!");
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("分配空間錯(cuò)誤!");
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("分配空間錯(cuò)誤!");
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()
{
//腐蝕運(yùn)算
// 獲取文檔
if (!flagpic)
{
AfxMessageBox("沒有輸入圖象!");
return;
}
dealpic.row=orgpic.row;
dealpic.col=orgpic.col;
if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
{
AfxMessageBox("分配空間錯(cuò)誤!");
return;
}
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) ChangeToHDIB(orgpic));
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的腐蝕,其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
AfxMessageBox("目前只支持256色位圖的腐蝕!", /*"系統(tǒng)提示" ,*/ MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL)ChangeToHDIB(orgpic));
// 返回
return;
}
int nMode;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -