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

📄 shiyuview.cpp

📁 数字图像处理的灰度处理源代码.rar
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -