www.pudn.com > DigtalImageProc.rar > HistoGramDialog.cpp


// HistoGramDialog.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "DigtalImageProc.h" 
#include "HistoGramDialog.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// HistoGramDialog dialog 
 
 
HistoGramDialog::HistoGramDialog(CWnd* pParent /*=NULL*/) 
	: CDialog(HistoGramDialog::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(HistoGramDialog) 
	//}}AFX_DATA_INIT 
	GrayFlag=1; 
	RedFlag=1; 
	GreenFlag=1; 
	BlueFlag=1; 
} 
 
 
void HistoGramDialog::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(HistoGramDialog) 
	DDX_Control(pDX, IDC_RED, m_Red); 
	DDX_Control(pDX, IDC_GREEN, m_Green); 
	DDX_Control(pDX, IDC_BLUE, m_Blue); 
	DDX_Control(pDX, IDC_GRAY2, m_Gray); 
	DDX_Control(pDX, ID_HISTOGRAM, m_Gram); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(HistoGramDialog, CDialog) 
	//{{AFX_MSG_MAP(HistoGramDialog) 
	ON_BN_CLICKED(IDC_RED, OnRed) 
	ON_BN_CLICKED(IDC_GREEN, OnGreen) 
	ON_BN_CLICKED(IDC_BLUE, OnBlue) 
	ON_BN_CLICKED(IDC_GRAY2, OnGray2) 
	ON_WM_PAINT() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// HistoGramDialog message handlers 
 
void HistoGramDialog::OnGray2()  
{ 
	// TODO: Add your control notification handler code here 
	GrayFlag=m_Gray.GetCheck(); 
	RedFlag=m_Red.GetCheck(); 
	GreenFlag=m_Green.GetCheck(); 
	BlueFlag=m_Blue.GetCheck(); 
	OnPaint();	 
} 
 
void HistoGramDialog::OnBlue()  
{ 
	// TODO: Add your control notification handler code here 
	GrayFlag=m_Gray.GetCheck(); 
	RedFlag=m_Red.GetCheck(); 
	GreenFlag=m_Green.GetCheck(); 
	BlueFlag=m_Blue.GetCheck(); 
	OnPaint();	 
} 
 
void HistoGramDialog::OnGreen()  
{ 
	// TODO: Add your control notification handler code here 
	GrayFlag=m_Gray.GetCheck(); 
	RedFlag=m_Red.GetCheck(); 
	GreenFlag=m_Green.GetCheck(); 
	BlueFlag=m_Blue.GetCheck(); 
	OnPaint();	 
} 
 
void HistoGramDialog::OnRed()  
{ 
	// TODO: Add your control notification handler code here 
	GrayFlag=m_Gray.GetCheck(); 
	RedFlag=m_Red.GetCheck(); 
	GreenFlag=m_Green.GetCheck(); 
	BlueFlag=m_Blue.GetCheck(); 
	OnPaint();	 
} 
 
void HistoGramDialog::OnPaint()  
{ 
	m_Gray.SetCheck(GrayFlag); 
	m_Red.SetCheck(RedFlag); 
	m_Green.SetCheck(GreenFlag); 
	m_Blue.SetCheck(BlueFlag); 
	CPaintDC dc(this); // device context for painting 
	CDC *pDC=m_Gram.GetDC(); 
	CRect r; 
	r.left=0;	r.right=300; 
	r.top=0;	r.bottom=110; 
	m_Gram.CalcWindowRect(&r); 
	m_Gram.SetWindowPos (&wndTop,0,0,r.right-r.left,r.bottom-r.top,SWP_NOMOVE); 
	SetWindowPos(&wndTop,0,0,400,250,SWP_NOMOVE); 
	m_Gram.GetClientRect(&r); 
	pDC->FillSolidRect(&r,RGB(0,0,0)); 
	CPen pen(PS_SOLID,1,RGB(128,128,128)); 
	CPen *oldpen=pDC->SelectObject(&pen); 
	CDigtalImageProcApp *app=(CDigtalImageProcApp *)AfxGetApp(); 
	if(m_Red.GetCheck()) 
	{ 
		CPen pen(PS_SOLID,1,RGB(255,0,0)); 
		pDC->SelectObject(&pen); 
		for(int i=0;i<256;i++) 
		{ 
			pDC->MoveTo(i+22,r.bottom-r.top-1); 
			int temp=int(app->RedData[i]*100); 
			pDC->LineTo(i+22,r.bottom-temp-1); 
		} 
	} 
	if(m_Green.GetCheck()) 
	{ 
		CPen pen(PS_SOLID,1,RGB(0,255,0)); 
		pDC->SelectObject(&pen); 
		for(int i=0;i<256;i++) 
		{ 
			pDC->MoveTo(i+22,r.bottom-r.top-1); 
			int temp=int(app->GreenData[i]*100); 
			pDC->LineTo(i+22,r.bottom-temp-1); 
		} 
	} 
	if(m_Blue.GetCheck()) 
	{ 
		CPen pen(PS_SOLID,1,RGB(0,0,255)); 
		pDC->SelectObject(&pen); 
		for(int i=0;i<256;i++) 
		{ 
			pDC->MoveTo(i+22,r.bottom-r.top-1); 
			int temp=int(app->BlueData[i]*100); 
			pDC->LineTo(i+22,r.bottom-temp-1); 
		} 
	} 
	if(m_Gray.GetCheck()) 
	{ 
		CPen pen(PS_SOLID,1,RGB(255,255,255)); 
		pDC->SelectObject(&pen); 
		for(int i=0;i<256;i++) 
		{ 
			pDC->MoveTo(i+22,r.bottom-r.top-1); 
			int temp=int(app->GrayData[i]*100); 
			pDC->LineTo(i+22,r.bottom-temp-1); 
		} 
	} 
	pDC->SelectObject(oldpen); 
}