⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linjunjuandoc.cpp

📁 图像处理软件,功能比较基础
💻 CPP
📖 第 1 页 / 共 5 页
字号:


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 + -