上传者: abche111
|
上传时间: 2019-12-21 19:22:42
|
文件大小: 134KB
|
文件类型: doc
图像的增强/////////////////////////////////直方图对话框构造函数;
ZFT::ZFT(CWnd* pParent /*=NULL*/)
: CDialog(ZFT::IDD, pParent)//ZFT为定义的用来显示直方图的对话框类;
{
Width=Height=0;//对话框初始化阶段设置图像的宽和高为"0";
}
////////////////////////对话框重画函数;
void ZFT::OnPaint()
{
CRect rect;//矩形区域对象;
CWnd *pWnd;//得到图片框的窗口指针;
pWnd=GetDlgItem(IDC_Graphic);//得到ZFT对话框内的"Frame"控件的指针;
file://(IDC_Graphic为放置在对话框上的一个"Picture"控件,并讲类型设置为"Frame")。
pWnd->GetClientRect(&rect);//得到"Frame"控件窗口的"视"区域;
int i;
CPaintDC dc(pWnd);//得到"Frame"控件的设备上下文;
file://画直方图的x、y轴;
dc.MoveTo(0,rect.Height());
dc.LineTo(rect.Width(),rect.Height());
dc.MoveTo(0,rect.Height());
dc.LineTo(0,0);
file://画直方图,num[]是"ZFT"的内部数组变量,存放的是图像各个灰度级出现的概率;该数组的各个分量在 显示具体图像的直方图时设置;
for(i=0;iGetWindowRect(&rect);//获取pWnd窗口对象窗口区域位置;
file://屏幕坐标转换为客户区坐标;
ScreenToClient(&rect);
file://判断当前鼠标是否指在直方图内;
if(rect.PtInRect (point))
{
int x=point1.x-rect.left;
file://当前鼠标位置减去区域的起始位置恰好为当前鼠标所指位置所表示的灰度级;
string.Format("%d",x);
file://显示当前位置对应的图像的灰度级;
pWndText->SetWindowText((LPCTSTR)string);
}
CDialog::OnMouseMove(nFlags, point);
}
////////////////////////////////////////
void CDibView::OnImagehorgm()
file://在程序的"视"类对象内处理显示图像直方图的函数;
{
CDibDoc *pDoc=GetDocument();
HDIB hdib;
hdib=pDoc->GetHDIB();
BITMAPINFOHEADER *lpDIBHdr;//位图信息头结构指针;
BYTE *lpDIBBits;//指向位图像素灰度值的指针;
lpDIBHdr=( BITMAPINFOHEADER *)GlobalLock(hdib);//得到图像的位图头信息
lpDIBB