📄 imageprocessview.cpp
字号:
// ImageProcessView.cpp : implementation of the CImageProcessView class
//
#include "stdafx.h"
#include "ImageProcess.h"
#include "MainFrm.h"
#include "ConvoluteDlg.h"
#include "ImageProcessDoc.h"
#include "ImageProcessView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CImageProcessView
IMPLEMENT_DYNCREATE(CImageProcessView, CScrollView)
BEGIN_MESSAGE_MAP(CImageProcessView, CScrollView)
//{{AFX_MSG_MAP(CImageProcessView)
ON_COMMAND(IDM_EAST, OnEast)
ON_UPDATE_COMMAND_UI(IDM_EAST, OnUpdateEast)
ON_COMMAND(IDM_HF1, OnHf1)
ON_UPDATE_COMMAND_UI(IDM_HF1, OnUpdateHf1)
ON_COMMAND(IDM_HF2, OnHf2)
ON_UPDATE_COMMAND_UI(IDM_HF2, OnUpdateHf2)
ON_COMMAND(IDM_HF3, OnHf3)
ON_UPDATE_COMMAND_UI(IDM_HF3, OnUpdateHf3)
ON_COMMAND(IDM_HORZ, OnHorz)
ON_UPDATE_COMMAND_UI(IDM_HORZ, OnUpdateHorz)
ON_COMMAND(IDM_LAP1, OnLap1)
ON_UPDATE_COMMAND_UI(IDM_LAP1, OnUpdateLap1)
ON_COMMAND(IDM_LAP2, OnLap2)
ON_UPDATE_COMMAND_UI(IDM_LAP2, OnUpdateLap2)
ON_COMMAND(IDM_LAP3, OnLap3)
ON_UPDATE_COMMAND_UI(IDM_LAP3, OnUpdateLap3)
ON_COMMAND(IDM_LAP4, OnLap4)
ON_UPDATE_COMMAND_UI(IDM_LAP4, OnUpdateLap4)
ON_COMMAND(IDM_LF1, OnLf1)
ON_UPDATE_COMMAND_UI(IDM_LF1, OnUpdateLf1)
ON_COMMAND(IDM_LF2, OnLf2)
ON_UPDATE_COMMAND_UI(IDM_LF2, OnUpdateLf2)
ON_COMMAND(IDM_LF3, OnLf3)
ON_UPDATE_COMMAND_UI(IDM_LF3, OnUpdateLf3)
ON_COMMAND(IDM_NORTH, OnNorth)
ON_UPDATE_COMMAND_UI(IDM_NORTH, OnUpdateNorth)
ON_COMMAND(IDM_NORTHEAST, OnNortheast)
ON_UPDATE_COMMAND_UI(IDM_NORTHEAST, OnUpdateNortheast)
ON_COMMAND(IDM_NORTHWEST, OnNorthwest)
ON_UPDATE_COMMAND_UI(IDM_NORTHWEST, OnUpdateNorthwest)
ON_COMMAND(IDM_SOUTH, OnSouth)
ON_UPDATE_COMMAND_UI(IDM_SOUTH, OnUpdateSouth)
ON_COMMAND(IDM_SOUTHEAST, OnSoutheast)
ON_UPDATE_COMMAND_UI(IDM_SOUTHEAST, OnUpdateSoutheast)
ON_COMMAND(IDM_SOUTHWEST, OnSouthwest)
ON_UPDATE_COMMAND_UI(IDM_SOUTHWEST, OnUpdateSouthwest)
ON_COMMAND(IDM_VERT, OnVert)
ON_UPDATE_COMMAND_UI(IDM_VERT, OnUpdateVert)
ON_COMMAND(IDM_VERTHORZ, OnVerthorz)
ON_UPDATE_COMMAND_UI(IDM_VERTHORZ, OnUpdateVerthorz)
ON_COMMAND(IDM_WEST, OnWest)
ON_UPDATE_COMMAND_UI(IDM_WEST, OnUpdateWest)
ON_COMMAND(IDM_SOBEL, OnSobel)
ON_UPDATE_COMMAND_UI(IDM_SOBEL, OnUpdateSobel)
ON_COMMAND(IDM_HOUGH, OnHough)
ON_UPDATE_COMMAND_UI(IDM_HOUGH, OnUpdateHough)
ON_COMMAND(IDM_MEDIANFILTER, OnMedianfilter)
ON_UPDATE_COMMAND_UI(IDM_MEDIANFILTER, OnUpdateMedianfilter)
ON_COMMAND(IDM_CLOSE_H, OnCloseH)
ON_UPDATE_COMMAND_UI(IDM_CLOSE_H, OnUpdateCloseH)
ON_COMMAND(IDM_CLOSE_V, OnCloseV)
ON_UPDATE_COMMAND_UI(IDM_CLOSE_V, OnUpdateCloseV)
ON_COMMAND(IDM_DILATION_H, OnDilationH)
ON_UPDATE_COMMAND_UI(IDM_DILATION_H, OnUpdateDilationH)
ON_COMMAND(IDM_DILATION_V, OnDilationV)
ON_UPDATE_COMMAND_UI(IDM_DILATION_V, OnUpdateDilationV)
ON_COMMAND(IDM_EROSION_H, OnErosionH)
ON_UPDATE_COMMAND_UI(IDM_EROSION_H, OnUpdateErosionH)
ON_COMMAND(IDM_EROSION_V, OnErosionV)
ON_UPDATE_COMMAND_UI(IDM_EROSION_V, OnUpdateErosionV)
ON_COMMAND(IDM_OPEN_H, OnOpenH)
ON_UPDATE_COMMAND_UI(IDM_OPEN_H, OnUpdateOpenH)
ON_COMMAND(IDM_OPEN_V, OnOpenV)
ON_UPDATE_COMMAND_UI(IDM_OPEN_V, OnUpdateOpenV)
ON_COMMAND(IDM_THIN, OnThin)
ON_UPDATE_COMMAND_UI(IDM_THIN, OnUpdateThin)
ON_COMMAND(IDM_FFT, OnFft)
ON_UPDATE_COMMAND_UI(IDM_FFT, OnUpdateFft)
ON_COMMAND(IDM_DCT, OnDct)
ON_UPDATE_COMMAND_UI(IDM_DCT, OnUpdateDct)
ON_COMMAND(IDM_REVERSE, OnReverse)
ON_UPDATE_COMMAND_UI(IDM_REVERSE, OnUpdateReverse)
ON_COMMAND(IDM_WALH, OnWalh)
ON_UPDATE_COMMAND_UI(IDM_WALH, OnUpdateWalh)
ON_COMMAND(IDM_CONTOUR_H, OnContourH)
ON_UPDATE_COMMAND_UI(IDM_CONTOUR_H, OnUpdateContourH)
ON_COMMAND(IDM_CONTOUR_V, OnContourV)
ON_UPDATE_COMMAND_UI(IDM_CONTOUR_V, OnUpdateContourV)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
ON_MESSAGE(WM_REALIZEPAL, OnRealizePal)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CImageProcessView construction/destruction
CImageProcessView::CImageProcessView()
{
// TODO: add construction code here
}
CImageProcessView::~CImageProcessView()
{
}
BOOL CImageProcessView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CImageProcessView drawing
void CImageProcessView::OnDraw(CDC* pDC)
{
CImageProcessDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (! pDoc->m_pDib->IsEmpty())
pDoc->m_pDib->Display(pDC, 0, 0);
}
void CImageProcessView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CImageProcessDoc* pDoc = GetDocument();
CSize sizeTotal(pDoc->m_pDib->GetWidth(), pDoc->m_pDib->GetHeight());
SetScrollSizes(MM_TEXT, sizeTotal);
CMainFrame* pAppFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;
ASSERT_KINDOF(CMainFrame, pAppFrame);
CRect rc;
pAppFrame->GetClientRect(&rc);
if (rc.Width() >= sizeTotal.cx && rc.Height() >= sizeTotal.cy &&
(sizeTotal.cx>0 || sizeTotal.cy>0))
ResizeParentToFit(FALSE);
}
/////////////////////////////////////////////////////////////////////////////
// CImageProcessView printing
BOOL CImageProcessView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CImageProcessView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CImageProcessView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CImageProcessView diagnostics
#ifdef _DEBUG
void CImageProcessView::AssertValid() const
{
CScrollView::AssertValid();
}
void CImageProcessView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CImageProcessDoc* CImageProcessView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CImageProcessDoc)));
return (CImageProcessDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CImageProcessView message handlers
LRESULT CImageProcessView::OnRealizePal(WPARAM wParam, LPARAM lParam)
{
ASSERT(wParam != NULL);
CImageProcessDoc* pDoc = GetDocument();
if (pDoc->m_pDib->IsEmpty())
return 0L; // must be a new document
CPalette* pPal = pDoc->m_pDib->GetPalette();
if (pPal != NULL)
{
CWnd* pAppFrame = AfxGetApp()->m_pMainWnd;
CClientDC appDC(pAppFrame);
// All views but one should be a background palette.
// wParam contains a handle to the active view, so the SelectPalette
// bForceBackground flag is FALSE only if wParam == m_hWnd (this view)
CPalette* oldPalette = appDC.SelectPalette(pPal, ((HWND)wParam) != m_hWnd);
if (oldPalette != NULL)
{
UINT nColorsChanged = appDC.RealizePalette();
if (nColorsChanged > 0)
GetDocument()->UpdateAllViews(NULL);
appDC.SelectPalette(oldPalette, TRUE);
}
else
{
TRACE0("\tSelectPalette failed!\n");
}
}
return 0L;
}
void CImageProcessView::OnHorz()
{
EdgeEnhance(HORZ);
}
void CImageProcessView::OnUpdateHorz(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnLap1()
{
EdgeEnhance(LAP1);
}
void CImageProcessView::OnUpdateLap1(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnLap2()
{
EdgeEnhance(LAP2);
}
void CImageProcessView::OnUpdateLap2(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnLap3()
{
EdgeEnhance(LAP3);
}
void CImageProcessView::OnUpdateLap3(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnLap4()
{
EdgeEnhance(LAP4);
}
void CImageProcessView::OnUpdateLap4(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnVert()
{
EdgeEnhance(VERT);
}
void CImageProcessView::OnUpdateVert(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnVerthorz()
{
EdgeEnhance(VERTHORZ);
}
void CImageProcessView::OnUpdateVerthorz(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnHf1()
{
CConvoluteDlg FD(1,10,3,this);
if (FD.DoModal() == IDOK)
{
CImageProcessDoc* pDoc = GetDocument();
pDoc->m_pDib->HighPass(FD.m_nStreng, FILTER1);
pDoc->SetModifiedFlag(TRUE);
OnRealizePal((WPARAM)m_hWnd,0); // realize the new palette
pDoc->UpdateAllViews(NULL);
}
}
void CImageProcessView::OnUpdateHf1(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnHf2()
{
CConvoluteDlg FD(1,10,3,this);
if (FD.DoModal() == IDOK)
{
CImageProcessDoc* pDoc = GetDocument();
pDoc->m_pDib->HighPass(FD.m_nStreng, FILTER2);
pDoc->SetModifiedFlag(TRUE);
OnRealizePal((WPARAM)m_hWnd,0); // realize the new palette
pDoc->UpdateAllViews(NULL);
}
}
void CImageProcessView::OnUpdateHf2(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnHf3()
{
CConvoluteDlg FD(1,10,3,this);
if (FD.DoModal() == IDOK)
{
CImageProcessDoc* pDoc = GetDocument();
pDoc->m_pDib->HighPass(FD.m_nStreng, FILTER3);
pDoc->SetModifiedFlag(TRUE);
OnRealizePal((WPARAM)m_hWnd,0); // realize the new palette
pDoc->UpdateAllViews(NULL);
}
}
void CImageProcessView::OnUpdateHf3(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnLf1()
{
CConvoluteDlg FD(1,10,3,this);
if (FD.DoModal() == IDOK)
{
CImageProcessDoc* pDoc = GetDocument();
pDoc->m_pDib->LowPass(FD.m_nStreng, FILTER1);
pDoc->SetModifiedFlag(TRUE);
OnRealizePal((WPARAM)m_hWnd,0); // realize the new palette
pDoc->UpdateAllViews(NULL);
}
}
void CImageProcessView::OnUpdateLf1(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnLf2()
{
CConvoluteDlg FD(1,10,3,this);
if (FD.DoModal() == IDOK)
{
CImageProcessDoc* pDoc = GetDocument();
pDoc->m_pDib->LowPass(FD.m_nStreng, FILTER2);
pDoc->SetModifiedFlag(TRUE);
OnRealizePal((WPARAM)m_hWnd,0); // realize the new palette
pDoc->UpdateAllViews(NULL);
}
}
void CImageProcessView::OnUpdateLf2(CCmdUI* pCmdUI)
{
pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}
void CImageProcessView::OnLf3()
{
CConvoluteDlg FD(1,10,3,this);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -