VC数字图像处理实验VC单文档

上传人:油** 文档编号:106478613 上传时间:2022-06-13 格式:DOC 页数:118 大小:4.14MB
收藏 版权申诉 举报 下载
VC数字图像处理实验VC单文档_第1页
第1页 / 共118页
VC数字图像处理实验VC单文档_第2页
第2页 / 共118页
VC数字图像处理实验VC单文档_第3页
第3页 / 共118页
资源描述:

《VC数字图像处理实验VC单文档》由会员分享,可在线阅读,更多相关《VC数字图像处理实验VC单文档(118页珍藏版)》请在装配图网上搜索。

1、.数字图像处理实验指导书山东大学威海分校机电与信息工程学院2012年3月概述实验项目:数字图像处理程序编程运行环境:WindowsXP/7编程工具:VisualC+6.0主要内容:(1)建立程序框架,实现图像的读取、保存、显示;(2)编写颜色处理、几何变换、平滑锐化等图像处理代码,并实现其调用;(3)自行编写实现扩展的图像处理功能。第一节建立程序框架预备工作:在本机的硬盘上以自己完整的学号和姓名建立一个文件夹。上机编程的内容全部保存在该文件夹中。每次下机前将该文件夹拷贝到网络服务器上本班的文件夹中;下次上机时再从服务器上将文件夹拷贝到本机。1.新建应用程序1.1运行VisualC+6.0;1.

2、2点击菜单“文件新建”,打开“新建”对话框(Ctrl+N);点击“工程”选项页;选中“MFCAppWizard(exe)”;在“位置”编辑框中选中自己所建立的文件夹;在“工程名称”编辑框中输入DIPXXX,其中XXX为自己姓名的拼音缩写和学号,如DIPJQ;按“确定”按钮,进入向导过程。2.应用程序向导步骤1:选择“单文档”,其它不变,步骤2:不作改变,点击“下一步”;步骤3:不作改变,步骤4:按下“高级”按钮,在“文件扩展名”编辑框中输入bmp,关闭;点击“下一步”;步骤5:选择“作为静态的DLL”,点击“下一步”;步骤6:将CDIPJQView类的基类选择为CScrollView,其它不变

3、,点击“完成”。点击“确定”。3.应用程序框架及基本操作在完成向导过程后,将建立一套应用程序框架,该框架中包含如下几个类:CDIPJQApp应用程序类CMainFrame主窗口框架类CDIPJQDoc文档类CDIPJQView视图类CAboutDlg关于对话框类(其中JQ应换为自己姓名的拼音缩写和学号,后同)每个类都有一个类定义文件.h,和类实现文件.cpp。在VC主界面左侧的组合窗口中,切换到“ClassViev”选项页,点击展开“DIPJQClasses”,将列出该应用程序的所有类。双击某个类,将在编辑窗口中打开该类的.h文件;点击展开类,双击类中已实现的某个成员函数,将打开该类的.cpp

4、文件。4.修改“关于”对话框在VC主界面左侧的组合窗口中,切换到“ResourceView”选项页,展开“DIPJQresources”,展开“Dialog”,双击“IDD_ABOUTBOX”,对“关于”对话框进行编辑,在“版权所有(C)2009”之前加上自己的学号和姓名,然后保存。5.组建和运行程序点击菜单“组建组建”,或点击相应的工具条按钮(F7),生成可执行程序(exe);点击菜单“组建执行”,或点击相应的工具条按钮(Ctrl+F5),运行该程序,在程序中打开“关于”对话框。第二节建立图像类1.建立类文件点击菜单“插入类”,打开“新建类”对话框;在类的类型中选中“GenericClass

5、”;在名称中输入“SDImage”;确定。建立起SDImage类的头文件SDImage.h和源文件SDImage.cpp。2.编写类定义代码打开SDImage.h文件,将SDImage类的定义代码添加到该头文件中(灰底部分为文件中已有的代码,后同):classSDImagepublic:BOOLCopyFrom(SDImage*a_pImg);BOOLCreate(inta_Width,inta_Height);intFitBlt(HDCa_DestDC,inta_DestX,inta_DestY,inta_DestWidth,inta_DestHeight,inta_SrcX,inta_Sr

6、cY,inta_SrcWidth,inta_SrcHeight,DWORDa_Rop=SRCCOPY);BOOLStretchBlt(HDCa_DestDC,inta_DestX,inta_DestY,inta_DestWidth,inta_DestHeight,inta_SrcX,inta_SrcY,inta_SrcWidth,inta_SrcHeight,DWORDa_Rop=SRCCOPY);BOOLBitBlt(HDCa_DestDC,inta_DestX,inta_DestY,inta_Width,inta_Height,inta_SrcX,inta_SrcY,DWORDa_Rop=

7、SRCCOPY);BOOLSaveBitmap(CStringa_Filename);BOOLIsValid();voidDestroy();CDCm_DC;BYTE*m_pBits;intm_ImageSize;intm_WidthBytes;intm_Height;BOOLLoadBmpFile(CStringa_Filename);intm_Width;SDImage();virtualSDImage();protected:HDCm_hMemDC;HBITMAPm_hBitmap;private:HBITMAPm_hOldBitmap;#endif/!defined(AFX_SDIMA

8、GE_H_BA98791A_D437_4687_AAEA_B988391C2FCC_INCLUDED_)*添加成员变量和成员函数右键单击左侧类中SDImage类,选择添加成员变量。右键单击左侧类中SDImage类,选择添加成员函数。3.编写类实现代码打开SDImage.cpp文件,将SDImage类的实现代码添加到该文件中。(1)构造及析构函数SDImage:SDImage()m_hBitmap=NULL;m_pBits=NULL;m_hMemDC=NULL;SDmage:SDmage()Destroy();(2)图像空间创建函数按给定的图像尺寸分配图像的内存空间,并定义相关参数。BOOLSD

9、Image:Create(inta_Width,inta_Height)Destroy();if(a_Width=0|a_Height=0)returnFALSE;if(a_Width0)a_Width=-a_Width;if(a_HeightIsValid()returnFALSE;if(!Create(a_pImg-m_Width,a_pImg-m_Height)returnFALSE;memcpy(void*)m_pBits,(void*)a_pImg-m_pBits,m_WidthBytes*m_Height);returnTRUE;(5)图像显示函数直接显示,缩放显示,按适合窗口的尺

10、寸显示图像。BOOLSDImage:BitBlt(HDCa_DestDC,inta_DestX,inta_DestY,inta_Width,inta_Height,inta_SrcX,inta_SrcY,DWORDa_Rop)return:BitBlt(a_DestDC,a_DestX,a_DestY,a_Width,a_Height,m_hMemDC,a_SrcX,a_SrcY,a_Rop)BOOLSDImage:StretchBlt(HDCa_DestDC,inta_DestX,inta_DestY,inta_DestWidth,inta_DestHeight,inta_SrcX,inta

11、_SrcY,inta_SrcWidth,inta_SrcHeight,DWORDa_Rop):SetStretchBltMode(a_DestDC,COLORONCOLOR);return:StretchBlt(a_DestDC,a_DestX,a_DestY,a_DestWidth,a_DestHeight,m_hMemDC,a_SrcX,a_SrcY,a_SrcWidth,a_SrcHeight,a_Rop);(6)Bmp文件读入函数BOOLSDImage:LoadBmpFile(CStringa_Filename)FILE*pf=fopen(a_Filename,rb);if(pf=NU

12、LL)returnFALSE;BITMAPFILEHEADERbmfHeader;if(fread(LPSTR)&bmfHeader,1,sizeof(bmfHeader),pf)!=sizeof(bmfHeader)fclose(pf);returnFALSE;if(bmfHeader.bfType!=(WORD)(MbmiHeader.biBitCount!=24)free(pBmp);returnFALSE;intwidthBytes=(pbi-bmiHeader.biWidth*pbi-bmiHeader.biBitCount+31)/32)*4;inti;BYTE*p1,*p2;RG

13、BQUAD*ci=pbi-bmiColors;if(Create(pbi-bmiHeader.biWidth,abs(pbi-bmiHeader.biHeight)intbytes=m_WidthBytes;if(byteswidthBytes)bytes=widthBytes;for(i=0;ibmiHeader.biHeightbmiHeader.biSize=sizeof(BITMAPINFOHEADER);pbmi-bmiHeader.biWidth=m_Width;pbmi-bmiHeader.biHeight=m_Height;pbmi-bmiHeader.biPlanes=1;p

14、bmi-bmiHeader.biBitCount=24;pbmi-bmiHeader.biCompression=BI_RGB;UINTwidthBytes=(m_Width*24+31)/32)*4;pbmi-bmiHeader.biSizeImage=widthBytes*m_Height;pbmi-bmiHeader.biXPelsPerMeter=11810;pbmi-bmiHeader.biYPelsPerMeter=11810;pbmi-bmiHeader.biClrUsed=0;pbmi-bmiHeader.biClrImportant=0;BITMAPFILEHEADERhdr

15、;BITMAPINFOHEADER*pbih;pbih=(BITMAPINFOHEADER*)pbmi;hdr.bfType=0x4d42;/0x42=B0x4d=Mhdr.bfSize=(DWORD)(sizeof(BITMAPFILEHEADER)+pbih-biSize+pbih-biSizeImage);hdr.bfReserved1=0;hdr.bfReserved2=0;hdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+pbih-biSize;fwrite(&hdr,sizeof(BITMAPFILEHEADER),1,pf);fwrite

16、(pbih,sizeof(BITMAPINFOHEADER),1,pf);inti;BYTE*p1;for(i=m_Height-1;i=0;i-)p1=m_pBits+m_WidthBytes*i;if(fwrite(p1,1,widthBytes,pf)!=widthBytes)free(HLOCAL)pbmi);fclose(pf);returnFALSE;free(HLOCAL)pbmi);fclose(pf);returnTRUE;4.组建程序在SDImage.cpp处于当前编辑窗口时,点击菜单“组建编译”,或点击相应的工具栏图标,对SDImage.cpp进行编译。在VC主界面下侧的

17、组合窗口中将显示编译的状态。当编译中出现错误时,按F4键将依次定位到源程序的错误处,请检查并改正错误。第四节定义图像文档实现图像读/写1.添加头文件在DIPJQ.h文件中添加如下一行代码:(其中灰色部分为程序中已有的代码,后同)#includeresource.h/mainsymbols#includeSDImage.h2.定义图像类指针在DIPJQDoc.h文件中添加如下一行代码:/Attributespublic:classSDImage*m_pCurImage,*m_pLastImage;注:定义两个图像类的指针,以使程序具备对最近一次处理的恢复功能。3.图像对象的建立和释放在“Clas

18、sView”选项页中,点击展开“CDIPJQDoc”,双击“CDIPJQDoc()”,打开DIPJQDoc.cpp文件,在文件中修改添加如下代码:CDIPJQDoc:CDIPJQDoc()/TODO:addone-timeconstructioncodeherem_pCurImage=newSDImage;m_pLastImage=newSDImage;CDIPJQDoc:CDIPJQDoc()deletem_pCurImage;deletem_pLastImage;4.进行消息映射点击菜单“查看建立类向导”,打开“MFCClassWizard”对话框(Ctrl+w)。在“ClassName”

19、下拉框中选中“CDIPJQDoc”,在“ObjectIDs”列表框中选中“CDIPJQDoc”,然后在“Messgaes”列表框中,选中“OnOpenDocument”并双击,建立起相应的消息映射函数;再选中“OnSaveDocument”双击。在“ObjectIDs”列表框中选中“ID_EDIT_UNDO”,然后在“Message”列表框中双击“COMMAND”,建立起相应的消息映射函数。5.添加消息映射函数代码在“ClassView”选项页中,点击展开“CDIPJQDoc”,双击“OnOpenDocument(LPCTSTRlpszPathName)”,打开DIPJQDoc.cpp文件,在

20、文件中添加如下代码:BOOLCDIPJQDoc:OnOpenDocument(LPCTSTRlpszPathName)if(!CDocument:OnOpenDocument(lpszPathName)returnFALSE;/TODO:Addyourspecializedcreationcodeherereturnm_pCurImage-LoadBmpFile(lpszPathName);BOOLCDIPJQDoc:OnSaveDocument(LPCTSTRlpszPathName)/TODO:Addyourspecializedcodehereand/orcallthebaseclass

21、returnm_pCurImage-SaveBitmap(lpszPathName);voidCDIPJQDoc:OnEditUndo()/TODO:Addyourcommandhandlercodehereif(m_pCurImage-IsValid()&m_pLastImage-IsValid()SDImage*p=m_pCurImage;m_pCurImage=m_pLastImage;m_pLastImage=p;UpdateAllViews(NULL);点击菜单“组建组建”,再次组建整个程序,排除组建过程中出现的错误。*此时运行程序,图像数据可以读入,但是无法显示图像。第五节实现图像

22、显示1.定义显示控制变量在DIPJQView.h文件中添加两个显示控制变量。public:CDIPJQDoc*GetDocument();intm_ShowMode;intm_ShowScale;在DIPJQView.cpp文件中定义两个显示模式枚举常量,在构造函数中给显示控制参数赋初值。enumSHOWMODE_SCALE,SHOWMODE_FIT;CDIPJQView:CDIPJQView()/TODO:addconstructioncodeherem_ShowMode=SHOWMODE_FIT;m_ShowScale=100;2.图像显示代码在CDIPJQView类的OnDraw()函数

23、中添加图像显示代码。voidCDIPJQView:OnDraw(CDC*pDC)CDIPJQDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:adddrawcodefornativedatahereCRectrect;if(m_ShowMode=SHOWMODE_FIT)GetClientRect(&rect);m_ShowScale=pDoc-m_pCurImage-FitBlt(pDC-m_hDC,0,0,rect.Width(),rect.Height(),0,0,pDoc-m_pCurImage-m_Width,pDoc-m_pCurIma

24、ge-m_Height);elseCSizesize;size=GetTotalSize();GetClientRect(&rect);intx0=0,y0=0;if(rect.Width()size.cx)x0=(rect.Width()-size.cx)/2;if(rect.Height()size.cy)y0=(rect.Height()-size.cy)/2;if(m_ShowScale=100)pDoc-m_pCurImage-BitBlt(pDC-m_hDC,x0,y0,pDoc-m_pCurImage-m_Width,pDoc-m_pCurImage-m_Height,0,0);

25、elsepDoc-m_pCurImage-StretchBlt(pDC-m_hDC,x0,y0,size.cx,size.cy,0,0,pDoc-m_pCurImage-m_Width,pDoc-m_pCurImage-m_Height);3.图像区域设置代码在CDIPJQView类的OnInitialUpdate()函数中添加视图滚动区域设置代码。voidCDIPJQView:OnInitialUpdate()CScrollView:OnInitialUpdate();CDIPJQDoc*pDoc=GetDocument();CSizesizeTotal;/TODO:calculatethe

26、totalsizeofthisviewif(pDoc-m_pCurImage-IsValid()if(m_ShowMode=SHOWMODE_FIT)CRectrect;this-GetClientRect(&rect);sizeTotal.cx=rect.Width();sizeTotal.cy=rect.Height();elsesizeTotal.cx=(int)(pDoc-m_pCurImage-m_Width*m_ShowScale/100.0+0.5);sizeTotal.cy=(int)(pDoc-m_pCurImage-m_Height*m_ShowScale/100.0+0.

27、5);/(CMainFrame*)AfxGetApp()-m_pMainWnd)-ShowScale(m_ShowScale);elsesizeTotal.cx=sizeTotal.cy=100;SetScrollSizes(MM_TEXT,sizeTotal);4.修整程序菜单切换到“ResourceView”选项页,展开“DIPJQresources”,展开“Menu”,双击“IDR_MAINFRAME”,对菜单进行编辑。在各顶层菜单下保留如下菜单项,其余删除。文件:打开,保存,另存为,最近文件,退出编辑:撤消查看:工具栏,状态栏帮助:关于5.添加显示操作菜单点击顶层菜单“查看”,双击下部

28、空白菜单项,打开“菜单项目属性”对话框,在ID下拉列表框中输入“ID_SHOW_ENLARGE”,在标明编辑框中输入“放大”,在提示编辑框中输入“放大显示图象n放大”。关闭对话框,将该菜单项拖至最上部。继续依次建立如下三个菜单项:ID标明提示ID_SHOW_REDUCE缩小缩小显示图象n缩小ID_SHOW_ORIGINAL原始尺寸按原始尺寸显示图象n原始尺寸ID_SHOW_FIT适合窗口使图象完整显示在窗口中n适合窗口点击顶层菜单“查看”,双击下部空白菜单项,在“菜单项目属性”对话框中,选中“分隔符”,关闭对话框,将分隔符拖至“工具栏”菜单项之上,“适合窗口”之下。6.编辑工具栏切换到“Res

29、ourceView”选项页,展开“DIPJQresources”,展开“Toolbar”,双击“IDR_MAINFRAME”,对工具栏进行编辑。保留打开、保存、关于三个按钮,删除其它按钮。添加“撤消”按钮:点中最后的空白按钮,绘制撤消图形,双击该按钮,将ID设为“ID_EDIT_UNDO”,将按钮拖至保存按钮之后。再依次添加如下四个按钮:放大ID_SHOW_ENLARGE缩小ID_SHOW_REDUCE原始尺寸ID_SHOW_ORIGINAL适合屏幕ID_SHOW_FIT工具栏中个按钮的形状如下:7.进行消息映射点击菜单“查看建立类向导”,打开“MFCClassWizard”对话框(Ctrl+

30、w)。在“ClassName”下拉框中选中“CDIPJQView”,在“ObjectIDs”列表框中选中“CDIPJQView”,然后在“Message”列表框中选中“WM_SIZE”并双击,建立消息映射函数。在“ObjectIDs”列表框中选中“ID_SHOW_ENLARGE”,然后在“Message”列表框中双击“COMMAND”,建立相应的消息映射函数。之后,依次建立“ID_SHOW_REDUCE”,“ID_SHOW_ORIGINAL”,“ID_SHOW_FIT”的消息映射函数。8.添加消息映射函数代码打开DIPJQView.cpp,在生成的消息映射函数中添加代码。voidCDIPJQV

31、iew:OnSize(UINTnType,intcx,intcy)CScrollView:OnSize(nType,cx,cy);/TODO:AddyourmessagehandlercodehereOnInitialUpdate();voidCDIPJQView:OnShowEnlarge()/TODO:Addyourcommandhandlercodeherem_ShowMode=SHOWMODE_SCALE;if(m_ShowScale=400)return;if(m_ShowScale100)m_ShowScale=(m_ShowScale+10)/10*10;elseif(m_Sho

32、wScale200)m_ShowScale=(m_ShowScale+25)/25*25;elseif(m_ShowScale400)m_ShowScale=(m_ShowScale+50)/50*50;OnInitialUpdate();voidCDIPJQView:OnShowReduce()/TODO:Addyourcommandhandlercodeherem_ShowMode=SHOWMODE_SCALE;if(m_ShowScale=10)return;if(m_ShowScale=100)m_ShowScale=(m_ShowScale-10)/10*10;elseif(m_Sh

33、owScale类”,打开“新建类”对话框;在类的类型中选中“GenericClass”;在名称中输入“SDImageProc”;确定。将生成SDImageProc类的头文件SDImageProc.h和源文件SDImageProc.cpp。2.编写类定义代码在头文件中编写SDmageProc类定义代码,如下。classSDImageProcpublic:SDImageProc();virtualSDImageProc();classSDImage*m_pSrcImg,*m_pDestImg;BOOLImageIsValid();#endif/!defined(AFX_SDMAGEPROC_H_C

34、A6A65DD_DBE3_4D8F_AE45_FD6611866EE3_INCLUDED_)3.编写类实现代码在SDImageProc.cpp中添加如下类实现代码:#includemath.hSDImageProc:SDImageProc()m_pSrcImg=m_pDestImg=NULL;SDImageProc:SDImageProc()BOOLSDImageProc:ImageIsValid()if(m_pSrcImg=NULL|m_pDestImg=NULL)returnFALSE;returnm_pSrcImg-IsValid();说明:各图像处理函数均将在该类中定义并实现,每添加一

35、个图像处理函数,都应首先在SDImageProc.h文件中加入函数定义代码,然后在SDImageProc.cpp文件中编写函数实现代码。第七节实现颜色处理功能(一)亮度处理1.在图像处理类中实现亮度处理功能在SDImageProc类中添加并实现亮度处理函数。首先打开SDImageProc.h文件,在其中加入亮度处理函数的定义,如下:classSDImageProcpublic:SDImageProc();virtualSDImageProc();classSDImage*m_pSrcImg,*m_pDestImg;BOOLImageIsValid();/源和目标图象是否有效BOOLModify

36、Light(floatd);/亮度调整,-11;#endif/!defined(AFX_SDMAGEPROC_H_CA6A65DD_DBE3_4D8F_AE45_FD6611866EE3_INCLUDED_)再打开SDImageProc.cpp文件,在最后添加亮度处理函数的实现代码,如下:BOOLSDmageProc:ModifyLight(floatd)if(!ImageIsValid()returnFALSE;m_pDestImg-Create(m_pSrcImg-m_Width,m_pSrcImg-m_Height);BYTE*sd=m_pSrcImg-m_pBits;BYTE*dd=m

37、_pDestImg-m_pBits;if(d1)d=1;if(d-1)d=-1;d=1+d;inti,v;BYTEcolMap256;for(i=0;i255)v=255;colMapi=(BYTE)v;for(i=0;im_ImageSize;i+)ddi=colMapsdi;returnTRUE;*注:(1)以上函数中加粗的5行代码,是在后面所要实现的各图像处理函数中都需要固定写出的代码。前4行总是写在函数开始处,后1行总是写在函数结尾处。(2)在所有的图像处理函数中,处理得到的图像都是写入新的图像数据块中,原图像数据块的指针总是sd,新图像数据块的指针总是dd。(3)在编程中所需用到的图

38、像参数变量为:原图像的宽度:pSrcImg-m_Width;原图像的高度:pSrcImg-m_Height;原图像每行字节数:pSrcImg-m_WidthBytes;原图像数据总字节数:pSrcImg-m_ImageSize。新图像的宽度:pDestImg-m_Width;新图像的高度:pDestImg-m_Height;新图像每行字节数:pDestImg-m_WidthBytes;新图像数据总字节数:pDestImg-m_ImageSize。2.建立亮度对话框,用于亮度调整参数的输入(1)切换到“ResourceView”选项页,展开“DIPJQResources”,在“Dialog”上点

39、击右键,选中“插入Dialog”,将新建并编辑一个对话框。(2)右键点击对话框上的空白处,选中“属性”,在ID中输入“IDD_DIALOG_LIGHT”,在标题中输入“亮度调整参数”,点击字体按钮,将字体设为Tahoma,字体大小设为10。(3)添加、调整对话框上的控件至下图所示状态:在控件工具栏上按下“静态文本”选择按钮,在对话框的适当位置拉出一个静态文本控件,在控件上点击右键属性,ID不变,标题输入为“亮度调整比例系数:”;添加编辑框,ID输入为“IDC_EDIT_LIGHT_D”。编辑完成后,点击保存按钮。(4)点击VC菜单“查看建立类向导”;选中“Createanewclass”,点击

40、OK;在Name编辑框中输入“CDlgLight”,点击OK,将建立CDlgLight类,并打开“MFCClassWizard”对话框。(5)于“MessageMaps”选项页,在“ObjectIDs”列表框的最后选中“IDOK”,然后在“Messages”列表框中选中“BN_CLICKED”,双击,将建立起“确定”按钮对应的消息映射函数。(6)切换至“MemberVariables”选项页,在“ControlIDs”列表框中选中“IDC_EDIT_LIGHT_D”,双击,在MemberVariablesName中输入“m_LightD”,在Cagetory中选中“Value”,在Variab

41、letype中选中“int”;点击OK。在MinimumValue中输入“-100”,在MaximumValue中输入“100”。点击“确定”按钮。3.建立菜单切换到“ResourceView”选项页,展开“DIPJQresources”,展开“Menu”,双击“IDR_MAINFRAME”,对菜单进行编辑。双击最后的空白顶层菜单,在标明编辑框中输入“颜色处理”,选中“弹出”。将该菜单拖至“查看”之后。点击菜单“颜色处理”,双击下部空白菜单项,打开“菜单项目属性”对话框,在ID下拉列表框中输入“ID_PROC_LIGHT”,在标明编辑框中输入“调整亮度”,在提示编辑框中输入“调整亮度n亮度”。

42、关闭对话框。4.建立消息映射函数在CDIPJQDoc类中建立“调整亮度”菜单项的消息映射函数:点击菜单“查看建立类向导”,在“ClassName”下拉框中选中“CDIPJQDoc”,在“ObjectIDs”列表框中选中“ID_PROC_LIGHT”,然后在“Message”列表框中双击“COMMAND”。5.在消息映射函数中添加调用代码打开DIPJQDoc.cpp文件,在文件首部已有的#include语句之后添加一行:#includeDlgLight.h#includeSDImage.h#includeSDmageProc.h在OnProcLight()函数中加入如下代码:voidCDIPJQ

43、Doc:OnProcLight()/TODO:AddyourcommandhandlercodehereCDlgLightdlg;if(dlg.DoModal()=IDOK)LImageProclip;lip.m_pSrcImg=m_pCurImage;lip.m_pDestImg=m_pLastImage;floatd=dlg.m_LightD/100.0;if(lip.ModifyLight(d)LImage*p=m_pCurImage;m_pCurImage=m_pLastImage;m_pLastImage=p;UpdateAllViews(NULL);SetPathName();注:

44、在之后其它的消息映射函数中,加粗的三行代码将因处理功能的不同而改变,其它各行代码则保持不变。6.组建程序,运行测试组建执行文件,排除错误,对亮度调整功能进行运行测试。在对图像进行了一次亮度调整后,可点击工具栏上的撤消按钮,将图像恢复为处理前的状态。(二)对比度处理1.在图像处理类中实现对比度处理功能在SDImageProc.h文件中加入对比度处理函数的定义:在LImageProc.h文件中加入对比度处理函数的定义:BOOLImageIsValid();/源和目标图象是否有效BOOLModifyLight(floatd);/亮度调整,-11BOOLModifyContrast(floatd);/

45、对比度调整,-11在LImageProc.cpp文件的最后,添加对比度处理函数的实现代码,如下:BOOLLImageProc:ModifyContrast(floatd)/对比度调整,-11if(!ImageIsValid()returnFALSE;m_pDestImg-Create(m_pSrcImg-m_Width,m_pSrcImg-m_Height);BYTE*sd=m_pSrcImg-m_pBits;BYTE*dd=m_pDestImg-m_pBits;/中间部分请参照前面的亮度处理函数自行写出returnTRUE;2.建立对比度对话框,用于对比度调整参数的的输入建立对比度对话框。对

46、话框ID设为“IDD_DIALOG_CONTRAST”,对话框标题设为“对比度调整参数”;编辑框的ID设为“IDD_EDIT_CONTRAST_D”;(Ctrl+w)对话框类的名称取为“CDlgContrast”;调整参数的变量名取为“m_ContrastD”。3.建立菜单切换到“ResourceView”选项页,展开“DIPJQresources”,展开“Menu”,双击“IDR_MAINFRAME”,对菜单进行编辑。点击菜单“颜色处理”,双击下部空白菜单项,打开“菜单项目属性”对话框,在ID下拉列表框中输入“ID_PROC_CONTRAST”,在标明编辑框中输入“调整对比度”,在提示编辑框

47、中输入“调整对比度n对比度”。关闭对话框。4.建立消息映射函数在CDIPJQDoc类中建立“调整对比度”菜单项的消息映射函数:点击菜单“查看建立类向导”,在“ClassName”下拉框中选中“CDIPJQDoc”,在“ObjectIDs”列表框中选中“ID_PROC_CONTRAST”,然后在“Message”列表框中双击“COMMAND”。5.在消息映射函数中添加调用代码打开DIPJQDoc.cpp文件,在文件首部已有的#include语句之后添加一行:#includeDlgContrast.h在OnProcContrast()函数中加入如下代码:voidCDIPJQDoc:OnProcContrast()/TODO:AddyourcommandhandlercodehereCDlgContrastdlg;if(dlg.DoModal()=IDOK)SDmageProclip;lip.m_pSrcImg=m_pCurImage;lip.m_pDestImg=m_pLastImage;floatd=dlg.m_ContrastD/100.0;if(lip.ModifyContrast(d)SDImage*p=m_pCurImage;m_pCurImage=m_pLastImage;m_pLastImage=p;UpdateAllViews(NULL);SetPathNa

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!