📄 usedlgs.cpp
字号:
}
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 + -