perspectivedlg.cpp
来自「一个非常全的vc编程的原程序代码是关于图像处理的!」· C++ 代码 · 共 192 行
CPP
192 行
// PerspectiveDlg.cpp : implementation file
//
#include "stdafx.h"
#include "ViewDIB.h"
#include "PerspectiveDlg.h"
#include "DibAPI.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPerspectiveDlg dialog
CPerspectiveDlg::CPerspectiveDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPerspectiveDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPerspectiveDlg)
m_f = 0;
m_fai = 0;
m_r = 0;
m_theta = 0;
//}}AFX_DATA_INIT
}
void CPerspectiveDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPerspectiveDlg)
DDX_Slider(pDX, IDC_SLIDER_F, m_f);
DDX_Slider(pDX, IDC_SLIDER_FAI, m_fai);
DDX_Slider(pDX, IDC_SLIDER_R, m_r);
DDX_Slider(pDX, IDC_SLIDER_THETA, m_theta);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPerspectiveDlg, CDialog)
//{{AFX_MSG_MAP(CPerspectiveDlg)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel)
ON_WM_HSCROLL()
ON_BN_CLICKED(IDC_BUTTON_APPLY, OnButtonApply)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPerspectiveDlg message handlers
BOOL CPerspectiveDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CDialog::OnInitDialog();
CSliderCtrl* pSlider1
= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_R);
CSliderCtrl* pSlider2
= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_THETA);
CSliderCtrl* pSlider3
= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_FAI);
CSliderCtrl* pSlider4
= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_F);
pSlider1->SetRange(3, 100);
pSlider2->SetRange(10, 170);
pSlider3->SetRange(0, 359);
pSlider4->SetRange(1, 100);
pSlider1->SetPos(10);
pSlider2->SetPos(90);
pSlider3->SetPos(0);
pSlider4->SetPos(10);
m_r = 1;
m_fai = 0;
m_theta = 0;
m_f = 1;
p1.x = 50; p1.y = 50;
p2.x = 100; p2.y = 50;
p3.x = 50; p3.y = 100;
p4.x = 100; p4.y = 100;
tp1.x = 50; tp1.y = 50;
tp2.x = 100; tp2.y = 50;
tp3.x = 50; tp3.y = 100;
tp4.x = 100; tp4.y = 100;
m_previewRect.left = 15;
m_previewRect.top = 15;
m_previewRect.right = 90;
m_previewRect.bottom = 90;
return TRUE;
}
void CPerspectiveDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
UpdateData(TRUE);
//some prepare work for painting.
CWnd* pWnd = GetDlgItem(IDC_PIC);
CDC* pControlDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
CPen penD, penD1;
CBrush brush;
CPen* pOldPen;
CBrush* pOldBrush;
penD.CreatePen(PS_SOLID, 2, RGB(0,0,255));
penD1.CreatePen(PS_SOLID, 2, RGB(0,255,0));
brush.CreateSolidBrush(RGB(255, 255, 255));
pOldBrush = pControlDC->SelectObject(&brush);
//drow the white frame.
pControlDC->Rectangle(0, 0, 150, 150);
pControlDC->SelectObject(pOldBrush);
//drow the picture rectangle.
pOldPen = pControlDC->SelectObject(&penD1);
pControlDC->MoveTo(p1);
pControlDC->LineTo(p2);
pControlDC->LineTo(p4);
pControlDC->LineTo(p3);
pControlDC->LineTo(p1);
pControlDC->SelectObject(pOldPen);
pOldPen = pControlDC->SelectObject(&penD);
pControlDC->MoveTo(tp1);
pControlDC->LineTo(tp2);
pControlDC->LineTo(tp4);
pControlDC->LineTo(tp3);
pControlDC->LineTo(tp1);
pControlDC->SelectObject(pOldPen);
//do the end work for paint.
pWnd->ReleaseDC(pControlDC);
UpdateData(FALSE);
// Do not call CDialog::OnPaint() for painting messages
}
void CPerspectiveDlg::OnButtonCancel()
{
// TODO: Add your control notification handler code here
OnOK();
}
void CPerspectiveDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
// TODO: Add your message handler code here and/or call default
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
UpdateData(TRUE);
int widthback = 150;
int heightback = 150;
tp1 = PerspectiveKer(p1, m_r, m_theta, m_fai, m_f, widthback, heightback);
tp2 = PerspectiveKer(p2, m_r, m_theta, m_fai, m_f, widthback, heightback);
tp3 = PerspectiveKer(p3, m_r, m_theta, m_fai, m_f, widthback, heightback);
tp4 = PerspectiveKer(p4, m_r, m_theta, m_fai, m_f, widthback, heightback);
Invalidate();
UpdateData(FALSE);
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CPerspectiveDlg::OnButtonApply()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CMainFrame* pCMainWnd = (CMainFrame*)GetParent();
pCMainWnd->OnPerspective();
UpdateData(FALSE);
return;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?