1/56目录实验1Windows编程模型及VisualC++环境.....................................................2实验2基本类库应用程序框架............................................................................9实验3设备无关位图的访问...............................................................................16实验4图像的灰度变换.......................................................................................29实验5图像的增强...............................................................................................33实验6图像的分割...............................................................................................42实验7图像编码压缩...........................................................................................482/56实验1Windows编程模型及VisualC++环境(一)实验目的1、熟悉VisualC++开发环境和Windows编程模型。2、学会使用VisualC++开发环境编写简单的应用程序以及程序的调试方法。(二)实验原理1、VisualC++开发环境介绍(1)工作空间窗口z类浏览方式在ClassViewTab页内,树状栏内每个节点对应一个类,分别为CAboutDlg、CImageShowApp、CImageShowDoc、CImageShowView、CMainFrame类以及Globals全局目录。z资源浏览方式在ResourceViewTab页内,可对每种资源进行编辑或修改,如添加菜单、添加工具栏、添加对话框以及添加图标等等,如下图:3/56z文件浏览方式在左下方的FileViewTab页内,从中可看到SourceFiles、HeaderFiles、ResourceFiles等,分别为程序实现文件(.cpp)、头文件(.h)和资源文件,一般情况下,每组相同文件名的头文件和实现文件对应一个类;除了上述的这些文件外,还有创建的中间文件,具体如下:(2)向导栏方便查找类、类中成员变量、类中成员函数以及编译、链接及调试的工具条按钮窗口。(3)源代码窗口代码编辑窗口。(4)输出信息窗口输出编译、链接等信息。2、Windows编程模型(1)应用程序创建过程图文件扩展名说明CPP程序实现文件H头文件RC资源文件APS支持ResourceViewBSC浏览器信息文件CLW支持ClassWizardDEP附属文件DSP工程文件DSW工作区文件MAK外部生成文件NCB支持ClassViewOPT保留工作区配置PLG建立日志文件4/56(三)实验步骤1、文件--新建VisualC++Resource.hWindows头文件源文件MFC头文件编译器OBJ文件资源脚本文件(RC)位图、图标和其他资源资源编译器资源文件(RES)Windows,运行库和MFC库链接程序可执行文件(EXE)5/562、选定工程类型—输入工程保存目录和工程名(1)选择Win32ConsoleApplication工程类型。(2)选择好工程存放的目录位置,如E:\。(3)在工程名文本框中输入工程名,如TestHello,系统将自动新建TestHello工程,并将该工程的所有文件保存在E:\TestHello目录下。(4)点击确定按钮。3、”HelloWorld!”程序6/56(1)选择ConsoleApplication类型:A“Hello,World!”Application。(2)点击完成按钮。4、生成HelloWorldApplication(1)在源代码窗口中系统自动输入了上述窗口中的实现代码:7/56#includestdafx.hintmain(intargc,char*argv[])//函数入口{printf(HelloWorld!\n);//在Command窗口打印HelloWorld!字符串return0;}5、编译、链接并运行,观察显示6、按任意键,结束运行7、在原程序的基础上添加变量保存键盘输入值,并在main函数中添加接受键盘输入值的执行代码,代码如下:inti,j,sum;//添加的变量intmain(intargc,char*argv[]){printf(HelloWorld!\n);printf(i=);scanf(%d,&i);//接受键盘输入printf(j=);scanf(%d,&j);//接受键盘输入sum=i+j;printf(i+j=%d\n,sum);//打印加法结果return0;}8、设置断点和单步调试:将光标设置在需要设置断点的代码行处,按F9快捷键,在该行最前端可看到一个实心圈,表示断点设置有效,当程序运行到有效断点处,会停止在该处。如图:需对程序进行单步调试,可在上述状态下按F10快捷键,观察界面运行效果。要全速运行,8/56按F5快捷键,若要取消断点,可在刚才选中行上按F9即可删除断点9、退出工程(四)实验结果(五)思考1、编程实现加、减、乘、除等类似计算器的简单运算功能。9/56实验2基本类库应用程序框架(一)实验目的1、熟悉VisualC++开发环境和Windows编程模型。2、学会使用VisualC++开发环境编写MFC应用程序并掌握绘图的方法。(二)实验原理1、应用程序框架与类库C++流行的一个原因是它可以用类库扩充。类库是可在应用程序中使用的有关C++类的集合。例如,数学类库可以执行一般的数学运算,而通信类库可以支持通过串行链路的数据传输。有时,我们要派生自己的类。应用程序框架是类库的超集。一般的类库只是一种类的集合,用来嵌入在任何程序中,但是,应用程序框架却定义了程序的结构。2、MFC单文档应用程序框架类介绍在ClassViewTab页内,树状栏内除了Globals全局目录,每个节点对应一个类,分别为CAboutDlg、CTestMFCApp、CTestMFCDoc、CTestMFCView、CMainFrame类。每个类对应FileView页内的两个文件,分别为程序实现文件(.cpp)、头文件(.h)(1)CAboutDlg类关于对话框类,一般显示软件版本及其他一些软件信息,按下工具栏上的问号图标即可弹出关于对话框。(2)CTestMFCApp类应用程序类,该程序的可见入口就在该类中,其他的类都会由该类调用,程序可见入口由InitInstance函数开始,如BOOLCTestMFCApp::InitInstance(){},此函数相当于c程10/56序的main()函数。(3)CTestMFCDoc类程序文档类,利用该类对程序的数据进行管理,特别是各类文件数据的管理,如BMP文件就在该类中打开,并将图像数据保存在该类的某个成员变量中。(4)CTestMFCView类程序视图类,利用该类对程序的显示视图(中间白色的一块区域)进行管理,如对BMP图片的显示就由该类管理,由类中的OnDraw函数执行。(5)CMainFrame类程序框架类,利用该类对程序的框架进行管理,如标题栏、菜单、工具栏、状态栏等,当然有时对这些框架的响应事件也可由视图类进行管理,放在框架类中只是为了结构上清晰一些。(6)Globals目录程序的全局变量和全局函数显示在该节点中。3、MFC单文档应用程序资源介绍VisualC++内含资源编辑器,通过读取工程中的.rc文件对工程中的资源进行编辑。在很大程度上,.rc文件中的内容决定了应用程序的“外观与感觉”,其中包括快捷键、对话框、图标、菜单、字符串表、工具栏、版本描述。如下图所示:(三)实验步骤1、运行AppWizard新建MFC单文档工程11/56(1)选择MFCAppWizard工程类型。(2)选择好工程存放的目录位置,如E:\。(3)在工程名文本框中输入工程名,如TestMFC,系统将自动新建TestMFC工程,并将该工程的所有文件保存在E:\TestMFC目录下。(4)点击确定按钮。2、选定单文档SingleDocument项目12/56(1)选择S单个文档。(2)点击下一步。3、前面四个屏幕都默认设置,都选择点击下一步,最后一个视图如图:(1)点击完成4、工程创建完成13/56(1)向导自动生成了类CAboutDlg、CMainFrame、CTestMFCApp、CTestMFCDoc、CTestMFCView。(2)在Globals节点中显示有全局变量CTestMFCApptheApp,该变量表示的是该应用程序类。5、编译、链接(F7)及运行(CTRL+F5)6、添加代码进行绘制窗口14/56(1)在类CTestMFCView的实现文件TestMFCView.cpp文件中找到绘图函数OnDraw,在该函数中添加如下代码:pDC-TextOut(0,0,Hello,world!);//打印文字”Hello,world!”pDC-SelectStockObject(GRAY_BRUSH);//选择灰色刷子pDC-Ellipse(CRect(0,20,100,120));//画直径为100的圆7、编译、链接(F7)及运行(CTRL+F5),观察显示8、添加类中成员变量和成员函数8、结束运行,退出工程(四)实验结果1、绘图运行效果15/56(1)窗口中显示”Hello,world!”字符串,在其下方显示一半径为50的圆。(五)思考1、编程实现在单文档窗口中绘出sine曲线。16/56实验3设备无关位图的访问(一)实验目的1、熟悉VisualC++开发环境和Windows编程模型。2、掌握设备无关位图的数据格式。3、学会使用DIBAPI函数访问设备无关位图。4、结合实例学习如何在应用程序中添加对设备无关位图的访问操作。(二)实验原理BMP文件是DIB(Device-IndependentBitmaps,设备无关位图)中比较典型的一种,其文件格式可分为两大部分:文件头部分和像素点阵部分。文件头包含了DIB的结构数据,进一步分为三段:BITMAPFILEHEADER、BITMAPINFOHEADER以及调色板,具体见教材27页。在此之后便是图像的像素点阵序列,根据位深度的不同有着不同的定义。24位位深度图像用三个字节存放一个完整的像素;16位位深度的图像采用“565”的组织方式,用两个字节存放一个像素。后续所有程序均以24位位深度BMP图像作为处理对象。1、显示彩色图像或者灰度图像在菜单中或者工具栏中按下“打开”文件按钮,即弹出一个文件选择对话框,选择一个BMP图片文件,点击“确定”按钮后即可显示图片,彩色和灰度都可。2、将彩色图像转换成灰度图像在菜单中点击“编辑”按钮,按下“彩色—灰度”按钮,即执行将彩色转换成灰度的操作同时进行显示。(三)实验步骤1、图像显示代码说明(1)利用工程向导建立好初始应用工程ImageShow后,会见到上面提到的5个程序类以及一个Globals目录,第一步要将DIBAPI函数库包含到工程中来。DIBAPI函数库包含两个文件DIBAPI.h以及DIBAPI.cpp。在文件浏览方式下ImageShowFiles中SourceFiles的节点上点击右键,按下AddFilestoFolder按钮,如图:17/56弹出实现文件选择对话框,选择DIBAPI.cpp文件,点击确定,这样就将该实现文件添加进了工程,同样