📄 shiyuview.cpp
字号:
// shiyuView.cpp : implementation of the CShiyuView class
//
#include "stdafx.h"
#include "shiyu.h"
#include "DIBAPI.h"
#include "chist.h"
#include "move1.h"
#include "clinetrans.h"
#include "sizeChange.h"
#include "shiyuDoc.h"
#include "shiyuView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CShiyuView
IMPLEMENT_DYNCREATE(CShiyuView, CView)
BEGIN_MESSAGE_MAP(CShiyuView, CView)
//{{AFX_MSG_MAP(CShiyuView)
ON_COMMAND(ID_VIEW_HIST, OnViewHist)
ON_COMMAND(ID_PT_REVERSE, OnPtReverse)
ON_COMMAND(ID_SMOOTH, OnSmooth)
ON_COMMAND(ID_MENUITEM_SALTNOISE, OnMenuitemSaltnoise)
ON_COMMAND(ID_MENUITEM_SHARP, OnMenuitemSharp)
ON_COMMAND(ID_MENUITEM_MOVE, OnMenuitemMove)
ON_COMMAND(ID_MENUITEM_HORIZONTAL, OnMenuitemHorizontal)
ON_COMMAND(ID_MENUITEM_VERTICAL, OnMenuitemVertical)
ON_COMMAND(ID_MENUITEM_CIRCUMROTATE, OnMenuitemCircumrotate)
ON_COMMAND(ID_MENUITEM_LINETRANS, OnMenuitemLinetrans)
ON_COMMAND(ID_MENUITEM_CHANGSIZE, OnMenuitemChangsize)
ON_COMMAND(ID_MENUITEM_MIDFILTER, OnMenuitemMidfilter)
ON_COMMAND(ID_MENUITEM_SOBEL, OnMenuitemSobel)
ON_COMMAND(ID_MENUITEM_ROBERTS, OnMenuitemRoberts)
ON_COMMAND(ID_MENUITEM_PREWITT, OnMenuitemPrewitt)
ON_COMMAND(ID_MENUITEM_LAPLACIAN, OnMenuitemLaplacian)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CShiyuView construction/destruction
CShiyuView::CShiyuView()
{
// TODO: add construction code here
}
CShiyuView::~CShiyuView()
{
}
BOOL CShiyuView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CShiyuView drawing
void CShiyuView::OnDraw(CDC* pDC)
{
CShiyuDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
BeginWaitCursor();
HDIB hDIB=pDoc->GetHDIB();
if(hDIB!=NULL)
{
LPSTR lpDIB=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
int cxDIB=(int)::DIBWidth(lpDIB);
int cyDIB=(int)::DIBHeight(lpDIB);
::GlobalUnlock((HGLOBAL)hDIB);
CRect rcDIB;
rcDIB.top=rcDIB.left=0;
rcDIB.right=cxDIB;
rcDIB.bottom=cyDIB;
CRect rcDest;
if(pDC->IsPrinting())
{
int cxPage=pDC->GetDeviceCaps(HORZRES);
int cyPage=pDC->GetDeviceCaps(VERTRES);
int cxInch=pDC->GetDeviceCaps(LOGPIXELSX);
int cyInch=pDC->GetDeviceCaps(LOGPIXELSY);
rcDest.top=rcDest.left=0;
rcDest.bottom=(int)(((double)cyDIB*cxPage*cyInch)/((double)cxDIB*cxInch));
rcDest.right=cxPage;
int temp=cyPage-(rcDest.bottom-rcDest.top);
rcDest.bottom+=temp/2;
rcDest.top+=temp/2;
}
else
{
rcDest=rcDIB;
}
::PaintDIB(pDC->m_hDC,&rcDest,pDoc->GetHDIB(),&rcDIB,pDoc->GetDocPalette());
}
EndWaitCursor();
}
/////////////////////////////////////////////////////////////////////////////
// CShiyuView printing
BOOL CShiyuView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CShiyuView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CShiyuView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CShiyuView diagnostics
#ifdef _DEBUG
void CShiyuView::AssertValid() const
{
CView::AssertValid();
}
void CShiyuView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CShiyuDoc* CShiyuView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CShiyuDoc)));
return (CShiyuDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CShiyuView message handlers
void CShiyuView::OnViewHist()
{
// TODO: Add your command handler code here
CShiyuDoc* pDoc=GetDocument();
if(pDoc->m_hDIB==NULL)
{
MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK);
return;
}
LPSTR lpDIB;
LPSTR lpDIBBits;
lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
lpDIBBits=::FindDIBBits(lpDIB);
if(::DIBNumColors(lpDIB)!=256)
{
MessageBox("目前只支持查看256色位图灰度直方图!","系统提示",MB_ICONINFORMATION|MB_OK);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
return;
}
BeginWaitCursor();
chist dlgPara;
dlgPara.m_lpDIBBits=lpDIBBits;
dlgPara.m_lWidth=::DIBWidth(lpDIB);
dlgPara.m_lHeight=::DIBHeight(lpDIB);
dlgPara.m_iLowGray=0;
dlgPara.m_iUpGray=255;
dlgPara.m_HueMax=dlgPara.m_iUpGray;
dlgPara.m_HueMin=dlgPara.m_iLowGray;
if(dlgPara.DoModal()!=IDOK)
{
return;
}
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
EndWaitCursor();
}
void CShiyuView::OnPtReverse()
{
// TODO: Add your command handler code here
CShiyuDoc* pDoc=GetDocument();
if(pDoc->m_hDIB==NULL)
{
MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK);
return;
}
LPSTR lpDIB;
LPSTR lpDIBBits;
lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
lpDIBBits=::FindDIBBits(lpDIB);
if(::DIBNumColors(lpDIB)!=256)
{
MessageBox("目前只支持256色位图!","系统提示",MB_ICONINFORMATION|MB_OK);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
return;
}
BeginWaitCursor();
::REVERSE(lpDIBBits,::DIBWidth(lpDIB),::DIBHeight(lpDIB));
pDoc->SetModifiedFlag(TRUE);
pDoc->UpdateAllViews(NULL);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
EndWaitCursor();
}
void CShiyuView::OnSmooth()
{
// TODO: Add your command handler code here
CShiyuDoc* pDoc=GetDocument();
if(pDoc->m_hDIB==NULL)
{
MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK);
return;
}
LPSTR lpDIB;
LPSTR lpDIBBits;
lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
lpDIBBits=::FindDIBBits(lpDIB);
if(::DIBNumColors(lpDIB)!=256)
{
MessageBox("目前只支持256色位图!","系统提示",MB_ICONINFORMATION|MB_OK);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
return;
}
BeginWaitCursor();
::AverFilter(lpDIBBits,::DIBWidth(lpDIB),::DIBHeight(lpDIB));
pDoc->SetModifiedFlag(TRUE);
pDoc->UpdateAllViews(NULL);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
EndWaitCursor();
}
void CShiyuView::OnMenuitemSaltnoise()
{
// TODO: Add your command handler code here
CShiyuDoc* pDoc=GetDocument();
if(pDoc->m_hDIB==NULL)
{
MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK);
return;
}
LPSTR lpDIB;
LPSTR lpDIBBits;
lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
lpDIBBits=::FindDIBBits(lpDIB);
if(::DIBNumColors(lpDIB)!=256)
{
MessageBox("目前只支持256色位图!","系统提示",MB_ICONINFORMATION|MB_OK);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
return;
}
BeginWaitCursor();
::SaltNoiseDIB(lpDIBBits,::DIBWidth(lpDIB),::DIBHeight(lpDIB));
pDoc->SetModifiedFlag(TRUE);
pDoc->UpdateAllViews(NULL);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
EndWaitCursor();
}
void CShiyuView::OnMenuitemSharp()
{
// TODO: Add your command handler code here
CShiyuDoc* pDoc=GetDocument();
if(pDoc->m_hDIB==NULL)
{
MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK);
return;
}
LPSTR lpDIB;
LPSTR lpDIBBits;
lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
lpDIBBits=::FindDIBBits(lpDIB);
if(::DIBNumColors(lpDIB)!=256)
{
MessageBox("目前只支持256色位图!","系统提示",MB_ICONINFORMATION|MB_OK);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
return;
}
BeginWaitCursor();
::GradSharp(lpDIBBits,::DIBWidth(lpDIB),::DIBHeight(lpDIB));
pDoc->SetModifiedFlag(TRUE);
pDoc->UpdateAllViews(NULL);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
EndWaitCursor();
}
void CShiyuView::OnMenuitemMove()
{
// TODO: Add your command handler code here
CShiyuDoc* pDoc=GetDocument();
if(pDoc->m_hDIB==NULL)
{
MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK);
return;
}
LPSTR lpDIB;
LPSTR lpDIBBits;
int dX,dY;
lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
lpDIBBits=::FindDIBBits(lpDIB);
if(::DIBNumColors(lpDIB)!=256)
{
MessageBox("目前只支持256色位图!","系统提示",MB_ICONINFORMATION|MB_OK);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
return;
}
Cmove move;
move.m_dx=100;
move.m_dy=100;
if(move.DoModal()!=IDOK)
{
return;
}
dX=move.m_dx;
dY=move.m_dy;
delete move;
BeginWaitCursor();
::Move(lpDIBBits,::DIBWidth(lpDIB),::DIBHeight(lpDIB),dX,dY);
pDoc->SetModifiedFlag(TRUE);
pDoc->UpdateAllViews(NULL);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
EndWaitCursor();
}
void CShiyuView::OnMenuitemHorizontal()
{
// TODO: Add your command handler code here
CShiyuDoc* pDoc=GetDocument();
if(pDoc->m_hDIB==NULL)
{
MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK);
return;
}
LPSTR lpDIB;
LPSTR lpDIBBits;
lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
lpDIBBits=::FindDIBBits(lpDIB);
if(::DIBNumColors(lpDIB)!=256)
{
MessageBox("目前只支持256色位图!","系统提示",MB_ICONINFORMATION|MB_OK);
::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());
return;
}
BeginWaitCursor();
::Horizontal(lpDIBBits,::DIBWidth(lpDIB),::DIBHeight(lpDIB));
pDoc->SetModifiedFlag(TRUE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -