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

📄 imggrabprocdoc.cpp

📁 《医学图象的远程传输系统》
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+2]=
					BOUND(GaussSmoothProc(0,pDibTmp,j,i)/16,0,255);
				}
			}
		}
		else{
			for (int nColor=0;nColor<3;nColor++){
				for (int j=1;j<m_bmInfo.bmiHeader.biHeight-1;j++){
					for (int i=1;i<m_bmInfo.bmiHeader.biWidth-1;i++){
						m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+nColor]=
							BOUND(GaussSmoothProc(nColor,pDibTmp,j,i)/16,0,255);	
					}
				}
			}
		}
		::GlobalFree (pDibTmp);
		EndWaitCursor();
		UpdateAllViews (NULL);
	}
}
//************************
	/*for (int lie=1;lie<m_bmInfo.bmiHeader.biHeight-1;lie++){
			for (int hang=1;hang<m_bmInfo.bmiHeader.biWidth-1;hang++){
				m_pDib[(lie*m_bmInfo.bmiHeader.biWidth +hang)*3]=1;
					m_pDib[(lie*m_bmInfo.bmiHeader.biWidth +hang)*3+1]=
					m_pDib[(lie*m_bmInfo.bmiHeader.biWidth +hang)*3+2]=
					BOUND(GaussSmoothProc(0,pDibTmp,lie,hang)/16,0,255);
			}
		}*/
//**************************8
int CImgGrabProcDoc::GaussSmoothProc (int nrgb,BYTE* pDibTem,int j,int i)
{
	int ColorTem=pDibTem[((j-1)*m_bmInfo.bmiHeader.biWidth +i-1)*3+ nrgb]*Gauss[0]+ 
				pDibTem[((j-1)*m_bmInfo.bmiHeader.biWidth +i)*3+ nrgb]*Gauss[1]+
				pDibTem[((j-1)*m_bmInfo.bmiHeader.biWidth +i+1)*3+ nrgb]*Gauss[2]+
				pDibTem[((j)*m_bmInfo.bmiHeader.biWidth +i-1)*3+ nrgb]*Gauss[3]+
				pDibTem[((j)*m_bmInfo.bmiHeader.biWidth +i)*3+ nrgb]*Gauss[4]+
				pDibTem[((j)*m_bmInfo.bmiHeader.biWidth +i+1)*3+ nrgb]*Gauss[5]+
				pDibTem[((j+1)*m_bmInfo.bmiHeader.biWidth +i-1)*3+ nrgb]*Gauss[6]+
				pDibTem[((j+1)*m_bmInfo.bmiHeader.biWidth +i)*3+ nrgb]*Gauss[7]+
				pDibTem[((j+1)*m_bmInfo.bmiHeader.biWidth +i+1)*3+ nrgb]*Gauss[8];
	return ColorTem;
}
//***********************Gauss smooth End********************

//*******************Median Filter**************
void CImgGrabProcDoc::OnMedianFilter() 
{
	if (!m_pDib){
		AfxMessageBox("No Image Opened");
		return;
	}
	ULONG nDibSize=m_bmInfo.bmiHeader.biWidth *m_bmInfo.bmiHeader.biHeight *3;
	BYTE* pDibTmp=(BYTE*)::GlobalAlloc (GMEM_FIXED,nDibSize);
	if (!pDibTmp){
		AfxMessageBox("Fail to allocate memory");
		return;
	}
	::CopyMemory(pDibTmp,m_pDib,nDibSize);
	MeFilterModeDlg dlg;
	if (dlg.DoModal ()==IDOK){
		BeginWaitCursor();
		switch (dlg.m_nMoudle ){
		case 0:
			MedianFilterProc(2,pDibTmp);
			break;
		case 1:
			MedianFilterProc(3,pDibTmp);
			break;
		case 2:
			MedianFilterProc(4,pDibTmp);
			break;
		}
		::GlobalFree(pDibTmp);
		EndWaitCursor();
		UpdateAllViews(NULL);
		
	}
}

void CImgGrabProcDoc::MedianFilterProc(int nMoudle,BYTE* pDibTem)
{	
	
	int l,k;
	int* ColorTmp=new int[nMoudle*nMoudle];
	for (int j=1;j<m_bmInfo.bmiHeader.biHeight-1;j++){
		for (int i=1;i<m_bmInfo.bmiHeader.biWidth-1;i++){			 
			//int* ColorTmp=new int[nMoudle*nMoudle];
			for (l=0;l<nMoudle;l++){
				for (k=0;k<nMoudle;k++){
					ColorTmp[l*nMoudle+k]=pDibTem[((j+l-1)*m_bmInfo.bmiHeader.biWidth+(i+k-1))*3];
				}
			}
			for (l=0;l<nMoudle*nMoudle;l++){
				for (k=0;k<nMoudle*nMoudle-l;k++){
					if (ColorTmp[l]>ColorTmp[l+1]){
						int a;
						a=ColorTmp[l+1];
						ColorTmp[l+1]=ColorTmp[l];
						ColorTmp[l]=a;
					}
				}
			}
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3]=
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+1]=
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+2]=
			BOUND((ColorTmp[(nMoudle*nMoudle)/2]+ColorTmp[(nMoudle*nMoudle)/2+1])/2,0,255);
		}
	}
	//delete []ColorTmp;
	return;
}
//********************Median filter End**********
//********************Grad sharp**************
void CImgGrabProcDoc::OnGradSharp() 
{
	if (!m_pDib){
		AfxMessageBox("No image to be process!");
		return;
	}
	ULONG nDibSize=m_bmInfo.bmiHeader.biWidth*m_bmInfo.bmiHeader.biHeight*3;
	BYTE* pDibTmp=(BYTE*)::GlobalAlloc(GMEM_FIXED,nDibSize);
	if (!pDibTmp){
		AfxMessageBox("Failed to allocate memory!");
		return;
	}
	BeginWaitCursor();
	::CopyMemory(pDibTmp,m_pDib,nDibSize);
	for (int j=0;j<m_bmInfo.bmiHeader.biHeight-1;j++){
		for (int i=0;i<m_bmInfo.bmiHeader.biWidth-1;i++){
			int ColorTmp=abs(pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i))*3]-
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i+1))*3])+
				abs(pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i))*3]-
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]);
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3]=
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+1]=
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+2]=BOUND(ColorTmp*4,0,255);
		}
	}
	::GlobalFree(pDibTmp);
	EndWaitCursor();
	UpdateAllViews(NULL);
}
//**********************Grad Sharp End*********************

//**********************High Boost Filter******************
void CImgGrabProcDoc::OnHighFilter() 
{
	if (!m_pDib){
		AfxMessageBox("No image to be process!");
		return;
	}
	ULONG nDibSize=m_bmInfo.bmiHeader.biWidth*m_bmInfo.bmiHeader.biHeight*3;
	BYTE* pDibTmp=(BYTE*)::GlobalAlloc(GMEM_FIXED,nDibSize);
	if (!pDibTmp){
		AfxMessageBox("Failed to allocate memory!");
		return;
	}
	BeginWaitCursor();
	::CopyMemory(pDibTmp,m_pDib,nDibSize);
	for (int j=1;j<m_bmInfo.bmiHeader.biHeight-1;j++){
		for (int i=1;i<m_bmInfo.bmiHeader.biWidth-1;i++){
			int ColorTmp=pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(-1)+
				pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(-1)+
				pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(-1)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(-1)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(9*2-1)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(-1)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(-1)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(-1)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(-1);
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3]=BOUND(ColorTmp/9,0,255);
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+1]=BOUND(ColorTmp/9,0,255);
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+2]=BOUND(ColorTmp/9,0,255);
		}
	}
	::GlobalFree(pDibTmp);
	EndWaitCursor();
	UpdateAllViews(NULL);	
	return;
}
//****************High Boost Filter End**************

//*********************draw Histograms***************
void CImgGrabProcDoc::OnHistogram() 
{
	if (!m_pDib){
		AfxMessageBox("No image to be process!");
		return;
	}
	ULONG nDibSize=m_bmInfo.bmiHeader.biWidth*m_bmInfo.bmiHeader.biHeight*3;
	BYTE* pDibTmp=(BYTE*)::GlobalAlloc(GMEM_FIXED,nDibSize);
	if (!pDibTmp){
		AfxMessageBox("Failed to allocate memory!");
		return;
	}
	HistogramsDlg dlg;
	::CopyMemory(pDibTmp,m_pDib,nDibSize);
	for (int j=0;j<m_bmInfo.bmiHeader.biHeight;j++){
		for (int i=0;i<m_bmInfo.bmiHeader.biWidth;i++){
			dlg.m_nR[BOUND(pDibTmp[(j*m_bmInfo.bmiHeader.biWidth+i)*3],0,255)]++;
			dlg.m_nG[BOUND(pDibTmp[(j*m_bmInfo.bmiHeader.biWidth+i)*3+1],0,255)]++;
			dlg.m_nB [BOUND(pDibTmp[(j*m_bmInfo.bmiHeader.biWidth+i)*3+2],0,255)]++;
		}
	}
	dlg.DoModal ();
	delete dlg;
	::GlobalFree(pDibTmp);
	return;

}
//*****************************End HistoGrams************

//*****************************Dot Liner Tran******************
void CImgGrabProcDoc::OnDotLiner() 
{
	if (!m_pDib){
		AfxMessageBox("No image to be process!");
		return;
	}
	LinerDlg dlg;
	if (dlg.DoModal ()==IDOK){
		BeginWaitCursor();
		for (int k=0;k<3;k++){
			for (int j=1;j<m_bmInfo.bmiHeader.biHeight;j++){
				for (int i=1;i<m_bmInfo.bmiHeader.biWidth;i++){
					m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+k]=
				BOUND(m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+k]*dlg.m_fa+dlg.m_fb,0,255);
				}
			}
		}
	}
	delete dlg;
	EndWaitCursor();
	UpdateAllViews(NULL);
	return;
	
}
//****************************End Liner Tran******************

//***********************window transform****************

void CImgGrabProcDoc::OnWindowTrans() 
{
	if (!m_pDib){
		AfxMessageBox("No image to be process!");
		return;
	}
	WindowTran dlg;	
	if (dlg.DoModal ()==IDOK){
		BeginWaitCursor();
		for (int k=0;k<3;k++){
			for (int j=1;j<m_bmInfo.bmiHeader.biHeight;j++){
				for (int i=1;i<m_bmInfo.bmiHeader.biWidth;i++){
					m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+k]=
						WINTRAN(m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+k],dlg.m_Low,dlg.m_Low+dlg.m_WindowWidth);
				}
			}
		}			
		EndWaitCursor();		
	}
	delete dlg;
	UpdateAllViews(NULL);
	return;
}
//****************End Window Tran****************
//***************Grad Average********************
void CImgGrabProcDoc::OnGradAvg() 
{
	if (!m_pDib){
		AfxMessageBox("No image to be process!");
		return;
	}
	int ImgS=m_bmInfo.bmiHeader.biWidth*m_bmInfo.bmiHeader.biHeight;
	ULONG nDibSize=ImgS*3;
	BYTE* pDibTmp=(BYTE*)::GlobalAlloc(GMEM_FIXED,nDibSize);
	if (!pDibTmp){
		AfxMessageBox("Failed to allocate memory!");
		return;
	}
	long RCount[256],GCount[256],BCount[256],TempR[256],TempG[256],TempB[256];
	BeginWaitCursor();
	for (int k=0;k<256;k++){
		GCount[k]=BCount[k]=RCount[k]=0;
		TempR[k]=TempG[k]=TempB[k]=0;
	}
	::CopyMemory(pDibTmp,m_pDib,nDibSize);
	for (int j=1;j<m_bmInfo.bmiHeader.biHeight;j++){
		for (int i=1;i<m_bmInfo.bmiHeader.biWidth;i++){
			RCount[m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3]]++;
			GCount[m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+1]]++;
			BCount[m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+2]]++;
		}
	}
	for (int i=0;i<256;i++){
		for (j=0;j<i;j++){
			TempR[i]+=RCount[j];
			TempG[i]+=GCount[j];
			TempB[i]+=BCount[j];
		}
	}
	for (int l=1;l<m_bmInfo.bmiHeader.biHeight;l++){
		for (int h=1;h<m_bmInfo.bmiHeader.biWidth;h++){
			
			m_pDib[(l*m_bmInfo.bmiHeader.biWidth+h)*3]
				=BOUND(TempR[m_pDib[(l*m_bmInfo.bmiHeader.biWidth+h)*3]]*255/ImgS,0,255);
			m_pDib[(l*m_bmInfo.bmiHeader.biWidth+h)*3+1]
				=BOUND(TempG[m_pDib[(l*m_bmInfo.bmiHeader.biWidth+h)*3+1]]*255/ImgS,0,255);
			m_pDib[(l*m_bmInfo.bmiHeader.biWidth+h)*3+2]
				=BOUND(TempB[m_pDib[(l*m_bmInfo.bmiHeader.biWidth+h)*3+2]]*255/ImgS,0,255);
			
		}
	}

	EndWaitCursor();
	::GlobalFree (pDibTmp);
	UpdateAllViews(NULL);
}
//**********end Grad average*********
//**************geometry tran*********8
void CImgGrabProcDoc::OnGeometryTran() 
{
	if (!m_pDib){
		AfxMessageBox("No image to be process!");
		return;
	}
/*	GeometryDlg dlg;
	dlg.DoModal ();

	dlg.m_X; 
	float* f=new float[dlg.m_X*dlg.m_X];
	for(int i=0;i<dlg.m_X*dlg.m_X;i++){
		f[i]=1;
	}
	//f[dlg.m_X*dlg.m_X-1]=0;*/
	BeginWaitCursor();
	if (!::Templat (m_pDib,m_bmInfo.bmiHeader.biWidth,m_bmInfo.bmiHeader.biHeight,
		3,3,1,1,Gauss,1.000/16)){
		AfxMessageBox("Error");
		return;}
	EndWaitCursor();
	UpdateAllViews(NULL);
}
//******************End Geometry********

//
void CImgGrabProcDoc::OnSobelConvo() 
{
	if (!m_pDib){
		AfxMessageBox("No image to be process!");
		return;
	}
	ULONG nDibSize=m_bmInfo.bmiHeader.biWidth*m_bmInfo.bmiHeader.biHeight*3;
	BYTE* pDibTmp=(BYTE*)::GlobalAlloc(GMEM_FIXED,nDibSize);
	if (!pDibTmp){
		AfxMessageBox("Failed to allocate memory!");
		return;
	}
	BeginWaitCursor();
	int Strength=2;
	::CopyMemory(pDibTmp,m_pDib,nDibSize);
	for (int j=1;j<m_bmInfo.bmiHeader.biHeight-1;j++){
		for (int i=1;i<m_bmInfo.bmiHeader.biWidth-1;i++){
			int ColorTmp=pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(-1)+
				pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(-2)+
				pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(-1)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(0)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(0)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(0)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(1)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(2)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(1);
			ColorTmp+=pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(-1)+
				pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(0)+
				pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(1)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(-2)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(0)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(2)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(-1)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(0)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(1);
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3]=BOUND(ColorTmp,0,255);
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+1]=BOUND(ColorTmp,0,255);
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+2]=BOUND(ColorTmp,0,255);
		}
	}
	::GlobalFree(pDibTmp);
	EndWaitCursor();
	UpdateAllViews(NULL);	
}
//
void CImgGrabProcDoc::OnProcConvolute() 
//convolute
//the convolute kernel are:
//-1  0  1        1  2  1
//-2  0  2  and   0  0  0
//-1  0  1       -1 -2 -1
//2002.04.27
{
	if (!m_pDib){
		AfxMessageBox("No image to be process!");
		return;
	}
	ULONG nDibSize=m_bmInfo.bmiHeader.biWidth*m_bmInfo.bmiHeader.biHeight*3;
	BYTE* pDibTmp=(BYTE*)::GlobalAlloc(GMEM_FIXED,nDibSize);
	if (!pDibTmp){
		AfxMessageBox("Failed to allocate memory!");
		return;
	}
	BeginWaitCursor();
	int Strength=2;
	::CopyMemory(pDibTmp,m_pDib,nDibSize);
	for (int j=1;j<m_bmInfo.bmiHeader.biHeight-1;j++){
		for (int i=1;i<m_bmInfo.bmiHeader.biWidth-1;i++){
			int ColorTmp=pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(-1)+
				pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(0)+
				pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(1)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(-2)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(0)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(2)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(-1)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(0)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(1);
			ColorTmp+=pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(1)+
				pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(2)+
				pDibTmp[((j-1)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(1)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(0)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(0)+
				pDibTmp[((j)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(0)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i-1))*3]*(-1)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i))*3]*(-2)+
				pDibTmp[((j+1)*m_bmInfo.bmiHeader.biWidth+(i+1))*3]*(-1);
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3]=BOUND(ColorTmp,0,255);
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+1]=BOUND(ColorTmp,0,255);
			m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+2]=BOUND(ColorTmp,0,255);
			//m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3]+=abs((ColorTmp-m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3])*Strength/10);
			//m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+1]+=abs((ColorTmp-m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+1])*Strength/10);
			//m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+2]+=abs((ColorTmp-m_pDib[(j*m_bmInfo.bmiHeader.biWidth+i)*3+2])*Strength/10);
		}
	}
	::GlobalFree(pDibTmp);
	EndWaitCursor();
	UpdateAllViews(NULL);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -