gusucode.com > VC 实现的二维小波变换用于图像去噪、压缩等源码程序 > QuantizeColorDlg.cpp

    // QuantizeColorDlg.cpp : implementation file
//

#include "stdafx.h"
#include "小波变换.h"
#include "QuantizeColorDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CQuantizeColorDlg dialog


CQuantizeColorDlg::CQuantizeColorDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CQuantizeColorDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CQuantizeColorDlg)
	m_red = 0;
	m_green = 0;
	m_blue = 0;
	m_bluemax = _T("");
	m_bluemin = _T("");
	m_greenmax = _T("");
	m_greenmin = _T("");
	m_redmax = _T("");
	m_redmin = _T("");
	//}}AFX_DATA_INIT
}


void CQuantizeColorDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CQuantizeColorDlg)
	DDX_Text(pDX, IDC_RED, m_red);
	DDX_Text(pDX, IDC_GREEN, m_green);
	DDX_Text(pDX, IDC_BLUE, m_blue);
	DDX_Text(pDX, IDC_BLUEMAX, m_bluemax);
	DDX_Text(pDX, IDC_BLUEMIN, m_bluemin);
	DDX_Text(pDX, IDC_GREENMAX, m_greenmax);
	DDX_Text(pDX, IDC_GREENMIN, m_greenmin);
	DDX_Text(pDX, IDC_REDMAX, m_redmax);
	DDX_Text(pDX, IDC_REDMIN, m_redmin);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CQuantizeColorDlg, CDialog)
	//{{AFX_MSG_MAP(CQuantizeColorDlg)
	ON_WM_PAINT()
	ON_WM_MOUSEMOVE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CQuantizeColorDlg message handlers

BOOL CQuantizeColorDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	GetDlgItem(IDC_HISGRAPHCOLOR)->GetWindowRect(&m_precthis);
	ScreenToClient(&m_precthis);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CQuantizeColorDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	//double height=(m_precthis.bottom-m_precthis.top)/3.0;
	double height=m_precthis.Height()/3.0;
	for(int ncolor=0;ncolor<3;ncolor++)
	{
		for(int i=0;i<256;i++)
		{
			dc.MoveTo(m_precthis.left+i,LONG(m_precthis.bottom-ncolor*height));
			dc.LineTo(m_precthis.left+i,
				LONG(m_precthis.bottom-height*ncolor-m_level[256*ncolor+i]/m_levelmax[ncolor]*height));
		}	
	}
	// Do not call CDialog::OnPaint() for painting messages
}

void CQuantizeColorDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	double x;
	if(m_precthis.PtInRect(point))
	{
		double m=(double)(m_precthis.bottom-point.y)/(double)(m_precthis.Height())*3.0;
		int i=int(m);
		x=(m_colormax[i]-m_colormin[i])/255*(point.x-m_precthis.left)+m_colormin[i];
		switch(i)
		{
		case 0:
			m_blue=int(x);
			break;
		case 1:
			m_green=int(x);
			break;
		case 2:
			m_red=int(x);
			break;
		}
		UpdateData(FALSE);
	}
	
	CDialog::OnMouseMove(nFlags, point);
}