接着(学习笔记5)来写,注意注意是在(学习笔记5)上去写直方图的。每个学习笔记都是在前一个基础上去写的。
好的废话完了,直接写直方图。
step1.修改菜单栏中灰度变换下直方图的ID,如下图所示:
step2.直方图的显示,我们需要设计一个对话框来在Picture Control控件中显示,所以第二步,我们来设计对话框。
步骤如下截屏所示:
设计的最终界面如下:
接下来一步步去阐述步骤和过程。
修改对话框的ID,和对话框的Caption以及从工具箱中拉入Group Box和Picture Control控件就不用说了,请注意:Group Box中拉进去了两个Picture Control控件。
第一Picture Control的ID修改
第二个Picture Control的ID修改,以及Type,Image修改。
左上角的照片如下:添加资源命名为IDB_BITMAP1
修改“均值”下边的Edit Control的ID
修改“方差”下边的Edit Control的ID
Picture Control还有一个属性需要修改。如下截图:
step3. 响应函数。
afx_msg void OnHistogramDraw();
void Cdemo1View::OnHistogramDraw()
{
// TODO: Add your command handler code here
//获取文档类中m_dib的指针,访问当前DIB数据
Cdemo1Doc *pDoc=GetDocument();
ImageDib *pDib=pDoc->m_dib;
//异常判断
if(pDib->m_nBitCount!=8&&pDib->m_nBitCount!=24){
::MessageBox(0,L"只处理灰度和彩色图像",MB_OK,0);
return ;
}
//直方图绘制对话框
HistogramDrawDlg dlgHist;
dlgHist.m_himageDib.ReplaceDib(pDib->GetDimensions(),pDib->m_nBitCount,
pDib->m_lpColorTable, pDib->m_pImgData);
//显示直方图
dlgHist.DoModal();
}
#if !defined(AFX_HISTOGRAMDRAWDLG_H__2CABD0F5_E9B6_4128_9979_64C4DAE89356__INCLUDED_)
#define AFX_HISTOGRAMDRAWDLG_H__2CABD0F5_E9B6_4128_9979_64C4DAE89356__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "ImageDib.h"
// HistogramDrawDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// HistogramDrawDlg dialog
class HistogramDrawDlg : public CDialog
{
// Construction
public:
//构造函数
HistogramDrawDlg(CWnd* pParent = NULL); // standard constructor
//ImgDib类的对象m_himageDib
ImageDib m_himageDib;
public:
//直方图数组
int m_histArray[256];
//直