Dialog 里插入对话框。将属性中标题改为显示原图,并 建立类向导, 生成新的 class,定义名为 XianShi,在其中添加 OnPaint,OnInitDillog.此时 对 CVcview 下的 OnXianShi 和 XianShi 下的 onPaint 和 onInitdDalog 分别写入代码,实 现原图像的显示功能。 步骤 5
:原图直方图的显示 操作步骤如同步骤四,详细见后续代码。 步骤 6:均衡化后的直方图显示 操作步骤如同步骤四,详细见后续代码。 步骤 7:显示均衡化之后的图像 操作步骤如同步骤四,详细见后续代码。
3 部分主要程序代码
(1) BMP 图像文件的打开程序代码 void CVCView::OnFileOpen() { // TODO: Add your command handler code here char filt[220]; strcpy(filt,"BMP Files(*.bmp)|*.bmp;|"); CFileDialog fd(true,"bmp", NULL, OFN_FILEMUSTEXIST,filt,this);
4
武汉理工大学《图像处理程序设计》课程考核说明书
if(fd.DoModal()!=IDOK)return; CString fname=fd.GetPathName(); fname1 = fname; fname.MakeUpper(); int i,dx,dy; i=GetBmpSize(fname,&;dx,&;dy); if(i==0) return; UINT *buf=new UINT[dx*dy]; ReadBmp(fname,dx,dy,buf); //显示图 mdr->overlay_rect(0,0,1000,1000,0xffffffff); 刷一遍 mdr->write_video(0,0,dx,dy,buf); mdr->swap(); delete buf; } void CVCView::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here if(mdc==NULL) mdc=new CClientDC(this); if(mdr==NULL) mdr=new mdraw(0,0,1000,600,mdc); else mdr->swap(); // Do not call CView::OnPaint() for painting messages } (2) 显示原图像程序代码 void CVCView::OnXianShi() { // TODO: Add your command handler code here //Dlg.DoModal(); XianShi Dlg; CString str;
5
//每次打开之前都要用白色
// TODO: Add your command handler code here
武汉理工大学《图像处理程序设计》课程考核说明书
int i,dx,dy; i=GetBmpSize(fname1,&;dx,&;dy); if(i==0) return; UINT *buf=new UINT[dx*dy]; ReadBmp(fname1,dx,dy,buf); Dlg.filename = fname1; Dlg.buf = buf; Dlg.DoModal(); delete buf; } void XianShi::OnPaint() { CPaintDC dc(this); CClientDC* pDC=new CClientDC(this); CBitmap m_bitmap; HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,_T(filename),IMAGE_BITMAP, 0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE); m_bitmap.Attach (hBitmap); CDC dcImage; if(!dcImage.CreateCompatibleDC (pDC)) return; BITMAP bm; m_bitmap.GetBitmap (&;bm); dcImage.SelectObject (&;m_bitmap); pDC->BitBlt (0,0,bm.bmWidth ,bm.bmHeight ,&;dcImage,0,0,SRCCOPY); this->SetWindowPos(NULL,NULL,NULL,bm.bmWidth+7,bm.bmHeight+30,SWP_NOMOVE); (3) 显示直方图程序代码 void CVCView::OnShowHist() { // TODO: Add your command handler code here //MessageBox("ok"); ShowHist Dlg;
6
武汉理工大学《图像处理程序设计》课程考核说明书
CString str; int i,dx,dy; i=GetBmpSize(fname1,&;dx,&;dy); if(i==0) return; UINT *buf=new UINT[dx*dy]; ReadBmp(fname1,dx,dy,buf); Dlg.filename = fname1; Dlg.buf = buf; Dlg.DoModal(); delete buf; } public: ShowHist(CWnd* pParent = NULL); int m_nHist[256]; UINT *buf; CString filename; BOOL ShowHist::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here CString str; int i,j,dx,dy; unsigned char * lpSrc; CString fname = this->filename; //MessageBox(fname); i=GetBmpSize(fname,&;dx,&;dy); //str.Format("dx=%d,dy=%d",dx,dy); //Messa
geBox(str); if(i==0) return false; UINT *buf=new UINT[dx*dy]; ReadBmp(fname,dx,dy,buf); grad