📄 histogramsdlg.cpp
字号:
// HistogramsDlg.cpp : implementation file
//
#include "stdafx.h"
#include "ImgGrabProc.h"
#include "HistogramsDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// HistogramsDlg dialog
HistogramsDlg::HistogramsDlg(CWnd* pParent /*=NULL*/)
: CDialog(HistogramsDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(HistogramsDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_orgPointR.x =50;
m_orgPointR.y =170;
m_orgPointG.x=50;
m_orgPointG.y =370;
m_orgPointB.x=50;
m_orgPointB.y =570;
for (int i=0;i<255;i++){
m_nR[i]=0;
m_nG[i]=0;
m_nB[i]=0;
}
}
void HistogramsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(HistogramsDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(HistogramsDlg, CDialog)
//{{AFX_MSG_MAP(HistogramsDlg)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// HistogramsDlg message handlers
void HistogramsDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
//draw red Histograms
CPen m_Redpen;
m_Redpen.CreatePen (PS_SOLID,1,RGB(255,0,0));
DrawHistograms(m_orgPointR,m_nR,&dc,&m_Redpen);
//draw Green Histograms
CPen m_Bluepen;
m_Bluepen.CreatePen (PS_SOLID,1,RGB(0,255,0));
DrawHistograms(m_orgPointG,m_nG,&dc,&m_Bluepen);
//draw blue Histograms
CPen m_Greenpen;
m_Greenpen.CreatePen (PS_SOLID,1,RGB(0,0,255));
DrawHistograms(m_orgPointB,m_nB,&dc,&m_Greenpen);
// Do not call CDialog::OnPaint() for painting messages
}
void HistogramsDlg::DrawHistograms(CPoint point, DWORD *nColor,CPaintDC* dc,CPen* pen)
{
CPen m_Newpen;
m_Newpen.CreatePen (PS_SOLID,2,RGB(0,0,0));
dc->SelectObject (&m_Newpen);
dc->MoveTo (point.x,point.y);
dc->LineTo (point.x,point.y-150);
dc->MoveTo (point.x,point.y);
dc->LineTo (point.x +255,point.y);
dc->SetBkMode (TRANSPARENT);
dc->TextOut (point.x +253,point.y-8,">");
dc->TextOut (point.x-3,point.y-158,"^");
for (int i=0;i<=200;i=i+50){
CString index;
index.Format ("%d",i);
dc->TextOut (point.x +i,point.y+5 ,index);
}
dc->TextOut (point.x +250,point.y +5,"255");
dc->SelectObject (pen);
DWORD RgbMax=nColor[0];
for (i=1;i<255;i++){
if (RgbMax<nColor[i]){
RgbMax=nColor[i];
}
}
for (i=0;i<255;i++){
dc->MoveTo (point.x+i,point.y-2);
dc->LineTo (point.x+i,point.y-int(float(nColor[i])/(RgbMax+1)*150));
//dc->LineTo (point.x+i,point.y-nColor[i]);
}
CString StrMax;
StrMax.Format("%d",RgbMax);
dc->TextOut(point.x,point.y-150,StrMax);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -