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

📄 usedlgs.cpp

📁 医学图象处理系统
💻 CPP
📖 第 1 页 / 共 4 页
字号:
}

void CManualBinaryDlg::OnRadio4() 
{
	m_BinaryType = 3;
}
/////////////////////////////////////////////////////////////////////////////
// CMorphparam dialog
CMorphparam::CMorphparam(CImageLABDoc *_pDoc,BOOL IsBinary, CWnd* pParent /*=NULL*/)
	: CDialog(CMorphparam::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMorphparam)
	m_MaskSize = 3;
	m_Type = 0;
	m_whichGray = 1;
	//}}AFX_DATA_INIT
	m_IsBinary  = IsBinary;
	m_pDoc      = _pDoc;
	TargetGray  = 255;
	MaxMaskSize = 7;
	memset(Element,0 ,15*15*sizeof(BOOL));
}

void CMorphparam::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMorphparam)
	DDX_Control(pDX, IDC_SPIN1, m_spin1);
	DDX_Text(pDX, IDC_EDIT1, m_MaskSize);
	DDV_MinMaxInt(pDX, m_MaskSize, 3, 15);
	DDX_Radio(pDX, IDC_RADIO1, m_Type);
	DDX_Radio(pDX, IDC_RADIO5, m_whichGray);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMorphparam, CDialog)
	//{{AFX_MSG_MAP(CMorphparam)
	ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, OnDeltaposSpin1)
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
	ON_BN_CLICKED(IDC_RADIO4, OnRadio4)
	ON_BN_CLICKED(IDC_RADIO5, OnRadio5)
	ON_BN_CLICKED(IDC_RADIO6, OnRadio6)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMorphparam message handlers
void CMorphparam::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
	int oldmask = m_MaskSize;
	m_MaskSize += 2*pNMUpDown->iDelta;
	if(m_MaskSize>MaxMaskSize) m_MaskSize = MaxMaskSize;
	else if(m_MaskSize<3) m_MaskSize = 3;
	UpdateData(FALSE);
	if(m_MaskSize!=oldmask) 
	{
		Invalidate();
		pApply->EnableWindow();
	}
	*pResult = 0;
}

void CMorphparam::OnOK() 
{
	OnButton1();
	CDialog::OnOK();
}

void CMorphparam::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	CRect rect , ShowRect;
	GetClientRect(&rect);
	int cx = (rect.left + rect.right)/2 -40;
	int cy = (rect.top + rect.bottom)/2-16;
	int Height = int(rect.Height()*0.6);
	int dr = int(double(Height)/(m_MaskSize-1)+0.5); 
	radius = int(dr*0.2+0.5);
	int i, j, HalfSize = m_MaskSize/2;
	for(j=0; j<m_MaskSize; j++)
	{
		for(i=0; i<m_MaskSize; i++)
		{
			Ptx[j][i] = cx + (i-HalfSize)*dr;
			Pty[j][i] = cy + (j-HalfSize)*dr;
		}
	}
	CBrush RedBrush(RGB(255,0,0));
	dc.SelectStockObject(NULL_PEN);
	CBrush  *pOldBrush   = dc.SelectObject(&RedBrush);
	for(j=0; j<m_MaskSize; j++)
	{
		for(i=0; i<m_MaskSize; i++)
		{
			if(!Element[j][i])
				dc.Ellipse( Ptx[j][i]-radius, Pty[j][i]-radius, 
						    Ptx[j][i]+radius, Pty[j][i]+radius);
			else
			{
				CPen     BlackPen(PS_SOLID,3,RGB(0,0,0));
				CPen    *pOldPen1   = dc.SelectObject(&BlackPen);
				dc.MoveTo(Ptx[j][i]-radius, Pty[j][i]);
				dc.LineTo(Ptx[j][i]+radius, Pty[j][i]);
				dc.MoveTo(Ptx[j][i], Pty[j][i]-radius);
				dc.LineTo(Ptx[j][i], Pty[j][i]+radius);
				dc.SelectObject(pOldPen1);
			}
		}
	}	
	dc.SelectObject(pOldBrush);
}

BOOL CMorphparam::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_spin1.SetRange( 3, MaxMaskSize);
	pApply = (CButton*) GetDlgItem(IDC_BUTTON1);
	if(!m_IsBinary)
	{
		 GetDlgItem(IDC_RADIO5)->EnableWindow(false);
		 GetDlgItem(IDC_RADIO5)->ShowWindow(SW_HIDE);
		 GetDlgItem(IDC_RADIO6)->EnableWindow(false);
		 GetDlgItem(IDC_RADIO6)->ShowWindow(SW_HIDE);
		 GetDlgItem(IDC_TARGETGROUP)->ShowWindow(SW_HIDE);
	}
	return TRUE;  
}

void CMorphparam::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	for(int j=0; j<m_MaskSize; j++)
	{
		for(int i=0; i<m_MaskSize; i++)
		{
			if(abs(Ptx[j][i]-point.x)<=radius&&abs(Pty[j][i]-point.y)<=radius)
			{
				Element[j][i] ^= 1;
				CRect Invrect = CRect(Ptx[j][i]-30,Pty[j][i]-30, Ptx[j][i]+30,Pty[j][i]+30);
				InvalidateRect(Invrect);
				pApply->EnableWindow();
			}
		}
	}
	CDialog::OnLButtonDown(nFlags, point);
}

void CMorphparam::OnButton1() 
{
	pView = m_pDoc->m_pView;
	if(pView!=NULL)
	{
		m_pDoc = pView->GetDocument();
		if(m_pDoc->Image.m_lpDibArray!=NULL && m_pDoc->Image.m_wImageDepth==8)
		{
			BYTE *lMask = new BYTE[m_MaskSize*m_MaskSize];
			int i, j;
			for(j=0; j<m_MaskSize; j++)
			{
				for(i=0; i<m_MaskSize; i++)
				{
					if(!Element[j][i]) lMask[j*m_MaskSize+i] = 1;
					else               lMask[j*m_MaskSize+i] = 0;
				}
			}
			m_pDoc->Image.ImgSwap();
			m_pDoc->Image.BackUp();
			if(pView->DashRectDrawed)
			{
				CPoint p1, p2;
				pView->GetSelectArea(p1, p2);
				if(m_IsBinary)
				{
					switch (m_Type)
					{
						case 0: 
						{
							m_pDoc->Image.BinaryMorph2(p1, p2, PT_Morphology_Dilation, 
													   lMask ,m_MaskSize, TargetGray);
							break;
						}
						case 1: 
						{
							m_pDoc->Image.BinaryMorph2(p1, p2, PT_Morphology_Erosion, 
													   lMask ,m_MaskSize, TargetGray);
							break;
						}
						case 2: 
						{
							m_pDoc->Image.BinaryMorph2(p1, p2, PT_Morphology_Opening, 
													   lMask ,m_MaskSize, TargetGray);
							break;
						}
						case 3: 
						{
							m_pDoc->Image.BinaryMorph2(p1, p2, PT_Morphology_Closing, 
													   lMask ,m_MaskSize, TargetGray);
							break;
						}
					}
				}
				else
				{
					switch (m_Type)
					{
						case 0: 
						{
							m_pDoc->Image.GrayMorph2(p1, p2, PT_Morphology_Dilation, 
													   lMask ,m_MaskSize);
							break;
						}
						case 1: 
						{
							m_pDoc->Image.GrayMorph2(p1, p2, PT_Morphology_Erosion, 
													   lMask ,m_MaskSize);
							break;
						}
						case 2: 
						{
							m_pDoc->Image.GrayMorph2(p1, p2, PT_Morphology_Opening, 
													   lMask ,m_MaskSize);
							break;
						}
						case 3: 
						{
							m_pDoc->Image.GrayMorph2(p1, p2, PT_Morphology_Closing, 
													   lMask ,m_MaskSize);
							break;
						}
					}
				}
				
				CRect InvalRect;
				InvalRect.left   = p1.x - pView->ScrollOrgPt.x;
				InvalRect.top    = p1.y - pView->ScrollOrgPt.y;
				InvalRect.right  = p2.x+1 - pView->ScrollOrgPt.x;
				InvalRect.bottom = p2.y+1 - pView->ScrollOrgPt.y;
				pView->InvalidateRect(InvalRect, FALSE);
			}
			else
			{
				if(m_IsBinary)
				{
					switch (m_Type)
					{
						case 0: 
						{
							m_pDoc->Image.BinaryMorph2(PT_Morphology_Dilation, 
													lMask ,m_MaskSize, TargetGray);	
							break;
						}
						case 1: 
						{
							m_pDoc->Image.BinaryMorph2(PT_Morphology_Erosion, 
													lMask ,m_MaskSize, TargetGray);	
							break;
						}
						case 2: 
						{
							m_pDoc->Image.BinaryMorph2(PT_Morphology_Opening, 
													lMask ,m_MaskSize, TargetGray);	
							break;
						}
						case 3: 
						{
							m_pDoc->Image.BinaryMorph2(PT_Morphology_Closing, 
													lMask ,m_MaskSize, TargetGray);	
							break;
						}
					}					
				}
				else
				{
					switch (m_Type)
					{
						case 0: 
						{
							m_pDoc->Image.GrayMorph2(PT_Morphology_Dilation, 
													lMask ,m_MaskSize);	
							break;
						}
						case 1: 
						{
							m_pDoc->Image.GrayMorph2(PT_Morphology_Erosion, 
													lMask ,m_MaskSize);	
							break;
						}
						case 2: 
						{
							m_pDoc->Image.GrayMorph2(PT_Morphology_Opening, 
													lMask ,m_MaskSize);	
							break;
						}
						case 3: 
						{
							m_pDoc->Image.GrayMorph2(PT_Morphology_Closing, 
													lMask ,m_MaskSize);	
							break;
						}
					}						
				}
				pView->Invalidate(FALSE);
			}
			if(lMask!=NULL) delete []lMask;
			pApply->EnableWindow(FALSE);
		}
	}

}

void CMorphparam::OnRadio1() 
{
	if(m_Type != 0)
	{
		m_Type = 0;
		pApply->EnableWindow();
	}
}

void CMorphparam::OnRadio2() 
{
	if(m_Type != 1)
	{
		m_Type = 1;
		pApply->EnableWindow();
	}
}

void CMorphparam::OnRadio3() 
{
	if(m_Type != 2)
	{
		m_Type = 2;
		pApply->EnableWindow();
	}
}

void CMorphparam::OnRadio4() 
{
	if(m_Type != 3)
	{
		m_Type = 3;
		pApply->EnableWindow();
	}
}
void CMorphparam::OnRadio5() 
{
	if(TargetGray != 0)
	{
		TargetGray = 0;
		pApply->EnableWindow();
	}
}

void CMorphparam::OnRadio6() 
{
	if(TargetGray != 255)
	{
		TargetGray = 255;
		pApply->EnableWindow();
	}
}
/////////////////////////////////////////////////////////////////////////////
// CFFTLowFilterDlg dialog
CFFTLowFilterDlg::CFFTLowFilterDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CFFTLowFilterDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFFTLowFilterDlg)
	m_D0 = 0.7;
	//}}AFX_DATA_INIT
}


void CFFTLowFilterDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFFTLowFilterDlg)
	DDX_Control(pDX, IDC_SLIDER1, m_Slide1);
	DDX_Control(pDX, IDC_SPIN1, m_Spin1);
	DDX_Text(pDX, IDC_EDIT1, m_D0);
	DDV_MinMaxDouble(pDX, m_D0, 1.e-006, 1.);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFFTLowFilterDlg, CDialog)
	//{{AFX_MSG_MAP(CFFTLowFilterDlg)
	ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, OnDeltaposSpin1)
	ON_WM_HSCROLL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFFTLowFilterDlg message handlers

BOOL CFFTLowFilterDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	m_Spin1.SetRange( 0, 100);
	m_Slide1.SetRange( 0, 100);
	m_Slide1.SetPos(int(m_D0*100));
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CFFTLowFilterDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
	m_D0 += pNMUpDown->iDelta*0.01;
	if(m_D0>1) m_D0 = 1;
	else if(m_D0<0) m_D0 = 0;
	m_Slide1.SetPos(int(m_D0*100));
	UpdateData(FALSE);
	*pResult = 0;
}

void CFFTLowFilterDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	CSliderCtrl* pSlider = (CSliderCtrl*)pScrollBar;
	m_D0 = pSlider->GetPos()/100.0;
	UpdateData(FALSE);
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
/////////////////////////////////////////////////////////////////////////////
// CFFTHighFilter dialog
CFFTHighFilter::CFFTHighFilter(CWnd* pParent /*=NULL*/)
	: CDialog(CFFTHighFilter::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFFTHighFilter)
	m_Select = 0;
	//}}AFX_DATA_INIT
	m_D0 = 0.002;
}

void CFFTHighFilter::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFFTHighFilter)
	DDX_Radio(pDX, IDC_RADIO1, m_Select);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CFFTHighFilter, CDialog)
	//{{AFX_MSG_MAP(CFFTHighFilter)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
	ON_BN_CLICKED(IDC_RADIO4, OnRadio4)
	ON_BN_CLICKED(IDC_RADIO5, OnRadio5)
	ON_BN_CLICKED(IDC_RADIO6, OnRadio6)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFFTHighFilter message handlers
void CFFTHighFilter::OnRadio1() 
{
	m_D0 = 0.002;
}
void CFFTHighFilter::OnRadio2() 
{
	m_D0 = 0.0045;	
}
void CFFTHighFilter::OnRadio3() 
{
	m_D0 = 0.065;
}
void CFFTHighFilter::OnRadio4() 
{
	m_D0 = 0.081;
}
void CFFTHighFilter::OnRadio5() 
{
	m_D0 = 0.095;
}
void CFFTHighFilter::OnRadio6() 
{
	m_D0 = 0.0120;
}


/////////////////////////////////////////////////////////////////////////////
// CTargetgrayDlg dialog
CTargetgrayDlg::CTargetgrayDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTargetgrayDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTargetgrayDlg)
	m_Which = 1;
	//}}AFX_DATA_INIT
	TargetGray = 255;
}

void CTargetgrayDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTargetgrayDlg)
	DDX_Radio(pDX, IDC_RADIO1, m_Which);
	//}}AFX_DATA_MAP
}

⌨️ 快捷键说明

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