收藏 分销(赏)

基于vc--的图像处理系统设计与实现.doc

上传人:w****g 文档编号:2501575 上传时间:2024-05-30 格式:DOC 页数:28 大小:729.50KB
下载 相关 举报
基于vc--的图像处理系统设计与实现.doc_第1页
第1页 / 共28页
基于vc--的图像处理系统设计与实现.doc_第2页
第2页 / 共28页
基于vc--的图像处理系统设计与实现.doc_第3页
第3页 / 共28页
基于vc--的图像处理系统设计与实现.doc_第4页
第4页 / 共28页
基于vc--的图像处理系统设计与实现.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、毕业设计(论文)基于VC+的图像处理系统设计与实现VC + + based Image Processing System Design and Implementation班级 计/商 061 学生姓名 学号 指导教师 职称 导师单位 徐州工业职业技术学院信息系 论文提交日期 22一选题意义及背景:图像处理技术一直是困扰Visual C+初学者的一个难题,在Visual C+中,没有一个完善的控件能够显示和处理各种格式的图像,有时用户需要了解各种图像的文件格式,这极大的增加了初学者的学习难度。基于此,设计了一个图像处理软件,本课题属于小型的图像处理软件,主要用于实现图像的显示与批量转换操作。

2、通过分析系统的工作过程,将其用Visual C+程序实现,将理论学习与实例相结合,来培养学生的综合能力。二毕业设计(论文)主要内容:主要工作:负责程序各个功能的整合、调试及运行三计划进度:阶段工作程序和要求完成时间前期准备阶段学习毕业设计管理规定并准备与测试有关的资料09.10.19中期指导检查阶段1.需求分析阶段及建立软件及硬件环境条件。分析设计任务书的要求和用户需求,进行可行性分析和需求分析,确定系统所需的模版,安装建立设计所需软硬件环境;素材采集,处理09.10.20-09.10.302. 在确定的模版上,对系统功能进行分工,进行相关程序设计,根据用户的使用反馈结果修正自己的设计方案,在

3、解决了大部分的bug后,可以将系统进行打包。09.11.02-09.11.043.进行软件的性能测试,09.11.04-09.11.064.编写测试脚本,并对测试结果进行分析 a.编写测试脚本b.对测试结果进行分析09.11.09-09.11.13后期答辩总结阶段1.编写毕业论文a.学习书写毕业论文规范b.查找与所要写的论文有关资料c.根据论文书写规范编写论文d.给指导老师审查并修改09.11.16-09.11.262.交毕业设计09.11.273.准备答辩09.11.27四毕业设计(论文)结束应提交的材料:1、测试计划2、测试脚本3、测试报告4、毕业论文指导教师 教研室主任 年 月 日年 月

4、 日论文真实性承诺及指导教师声明学生论文真实性承诺本人郑重声明:所提交的作品是本人在指导教师的指导下,独立进行研究工作所取得的成果,内容真实可靠,不存在抄袭、造假等学术不端行为。除文中已经注明引用的内容外,本论文不含其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。如被发现论文中存在抄袭、造假等学术不端行为,本人愿承担本声明的法律责任和一切后果。毕业生签名: 日 期: 指导教师关于学生论文真实性审核的声明本人郑重声明:已经对学生论文所涉及的内容进行严格审核,确定其内容均由学生在本人指导下取得,对他人论文及成果的引用已经明确注明,不存在抄袭

5、等学术不端行为。指导教师签名: 日 期: 摘 要本文对图形图像处理系统的发展现状和所采用的主要技术进行了详细分析,确定了相应的结构和主要功能,以及实际开发中所采取的技术。系统在Windows XP平台下实现,本课题是采用Visual C+作为编程工具,采用面向对象的程序设计技术实现一个图形绘制和图像处理的应用软件。主要工作分为三类,包括基本图形绘制与编辑、简单的图像处理、图像格式的转换。图形方面主要是设计图形基类,以及继承图形基类的具体图形类。通过对独立功能的封装,可以为今后需要的图形图像的应用奠定基础。系统的优点有:充分体现了面向对象的设计思想,充分运用了C+的特性。程序结构清晰,可读性好,

6、程序中做了充分的注释。 最后,对系统进行测试表明,系统功能达到了预期的要求,界面友好,操作简便,运行也较稳定,是一个完成基本功能的图形图像系统。 总体上,本文介绍了系统开发设计的全过程和设计过程中部分代码,对系统中采用的关键技术也作了一些必要的说明,对图像变换的基本原理,图像处理的基本原理和各种图像格式做了详细的阐述。关键词:图像处理系统,图像显示,图片格式转换。AbstractThis article has carried on the detailed analysis about graph image processing system development and using o

7、f the key technology,identify the corresponding structure and central function, as well as the system adopts technology in the actual development. The system realizes under the Windows XP platform, the topic use Visual C+ as a programming tool, use object-oriented programming techniques to achieve a

8、 graphic and image processing software. Major work is divided into three categories, basic drawing and editing graphics, simple image processing, and image format conversion. The graph aspect is designs the graph base class , as well as inherits the graph base classs specific graph class. Through in

9、dependent functions encapsulation, for the futures needs of the graphic images lays the foundation. The system merit has: the object-oriented designs thought application of the c+ properties, Programs structure is clear, good readability, codes has the full annotation in the program. Easy expansion

10、and transplantation. Finally, systems testing shows, systems functions achieve the expected demand, friendly interface, and the operation is simple, also a much stable operation, it has basic functions of the graphic image system. As a whole, this paper describes the system design process and part o

11、f the process of designing code, it made some necessary explanations about key technology in the system, it made the detailed description to image transform of the basic principle, the image processing basic principle and various image formats.Key word: The imagery processing system, image display,

12、image transforms.目 录摘 要IAbstractII第一章 图像处理系统11.1 概述11.2 系统分析11.2.1 需求分析11.2.2 可行性分析11.3 总体设计11.3.1 项目规划11.3.2 系统功能架构图21.4 系统设计31.4.1 设计目标31.4.2 开发及运行环境31.5 技术准备31.5.1 基本绘图操作31.5.2 内存画布的设计31.5.3 自定义全局函数41.5.4 自定义菜单51.5.5 自定义工具栏111.6主要功能模块的设计121.6.1 系统架构设计121.6.2公共模块设计141.6.3 主窗体设计14参考文献:18致谢19 第一章 图像

13、处理系统1.1 概述 图像处理技术一直是困扰Visual C+初学者的一个难题,在Visual C+中,没有一个完善的控件能够显示和处理各种格式的图像,有时用户需要了解各种图像的文件格式,这极大地增加了初学者的学习难度。基于此,设计一个图像处理软件。1.2 系统分析1.2.1 需求分析n 通过调查,要求系统具有以下功能。n 显示BMP、JPEG、GIF等各种格式的图像。n 实现BMP与JPEG、GIF图像的批量转换。n 实现对位图的旋转、反色、灰度化、线性变换等各种操作。n 实现手写数字的识别。1.2.2 可行性分析为了降低程序开发的难度,使用微软公司的GDI+。GDI+又称为GDIPlus,

14、是微软公司.NET构架的一部分,它封装了各种图像的处理技术。通过使用GDI,用户可以非常方便地实现图像的显示与转换。虽然GDI+属于.NET框架的一部分,但是用户可以在非.NET环境下使用GDI+,有关具体的使用方法,在以下部分进行介绍。 1.3 总体设计1.3.1 项目规划图像处理系统是一个典型的图像处理软件,它由图像显示、图像转换、图像处理、字符识别、其他和帮助等模块组成。l 图像显示模块该模块主要包括显示位图、显示JPEG、显示GIF 3个部分。l 图像转换模式该模块主要包括位图转换为JPEG、JPEG转换为位图、位图转换为GIF、GIF转换为位图4个部分。l 图像处理模块该模块主要包括

15、图像旋转、图像锐化处理、图像反色处理、灰度化处理、线性变换5个部分。l 字符识别模块该模块主要包括手写数字识别。l 其他模块该模块主要包括设置菜单的固定颜色和随机颜色两个部分。l 帮助模块该模块主要包括软件的版本、开发单位等信息。1.3.2 系统功能架构图图像处理系统图像显示模块图像转换模块图像处理模块字符识别模块帮助固定颜色随机颜色关于显示J PEG显示G I F显示位图位图转换JPEGJPEG转换位图位图转换GIFGIF转换位图图像旋转图像锐化处理图像反色处理灰度化处理线性变换手写数字识别其他系统功能构架图如图1.1所示图1.1 图像处理系统功能架构图1.4 系统设计1.4.1 设计目标本

16、系统属于小型的图像处理软件,主要用于实现图像的显示与批量转换操作。具体设计要求如下。l 实现各种图像格式的显示。l 系统采用良好的人机对话模式,界面设计美观、友好。l 支持图像的单一转换与批量转换。l 实现位图的各种常规操作。例如图像旋转、灰度化处理、线性变换等。l 系统运行稳定、安全可靠。1.4.2 开发及运行环境系统开发平台:Visual C+ 6.0 。运行平台:Windows XP/Windows 2000/Windows 2003 。分辨率:最佳效果 1024*1280像素。1.5 技术准备1.5.1 基本绘图操作绘图操作通常是指在窗口的某个区域输出位图图像。窗口通常关联一个设备上下

17、文CDC,所有的绘图操作都是通过CDC来完成的。用户可以通过调用窗口类的GetDC方法获得一个CDC对象指针。CDC提供BitBlt、StretchBlt等方法来输出位图,但是这些方法均需要借助另一个CDC对象来实现。如何设置源设备上下文,并调用BitBit方法输出位图。CDC*Pdc=GetDC( ); /获取窗口设备的上下文CBitmap bk ; /定义位图对象CDCmemdc; /定义设备上下文 memdc.CreateCompatibleDC(pDC); /创建一个兼容的设备上下文 bk.LoadBitmap(IDB_CHESSBOARD); /加载位图对象memdc.SelectO

18、bject(&bk); /选中位图pDC-BitBlt(0,600,600,&memdc,0,0,SRCCOPY);/调用BitBlt方法输出位图1.5.2 内存画布的设计在绘制图像时,如果频繁的进行多次绘图操作,会出现闪烁的情况。为了防止闪烁的出现,可以设计一个临时的画布,称之为内存画布,让所有的绘图操作均在内存画布上进行,然后在内存画布对象失去作用域时将其输出到目标设备上下文中,这样就阻止了闪烁情况的出现,内存画布的设计代码如下:m_ pbmp-CreateCompatibleBitmap(Pdc,rect.Width(),rect,Height() );m_poldbmp=SelectO

19、bject(m_bmp); /选中位图对象m_Pdc=PdC; /设置成员变量m_Rect=rect; /设置成员变量/将目标区域绘制在内存画布上this-BitBlt(m_Rect.left,m_Rect.top,m_Rect.Width(),m_Rect.Height(),Pdc,m_Rect.left,m_Rect.top,SRCCOPPY); SelectObject(m_poldbmp); /选中之前选中的对象If(m_pbmp!=NULL) /判断位图对象是否为空delete m_pbmp; /释放位图对象DelectObject(this); /释放设备上下文内存画布CMemDC

20、只包含一个构造函数和析构函数,其中,在构造函数部分,将根据参数pDC创建一个兼容的设备上下文,并且将pDC的内容绘制在内存画布上;在析构函数中,会将内存画布的内容输出到目标设备的上下文中。1.5.3 自定义全局函数在Visual C+中没有提供直接的函数用于获取文件的名称(去除扩展名)和获取文件的扩展名(去除文件名)。为此,定义了两个全局函数来获取文件的名称和文件扩展名。函数定义如下:CString ExtractFileName(CString&str) /获取文件名称intpos=str.ReverseFind(.) /反向查找“.”的位置return str.Left(pos); /从左

21、方开始截取字符串,并返回截取的字符串 CString GetFileExtended Name (CString&strFile) /获取文件扩展名int pos=strFile.ReverseFind(.); /反向查找“.”的位置return strFile.Right(strFile.GetLength()-pos-1)菜单栏高度在为本系统设计自定义菜单时,由于主界面对话框的宽度可以调整,导致菜单栏的高度会发生变化,如图1.2所示。图1.2 菜单栏高度从1.2中可以发现,当对话框的宽度变化时,菜单栏的高度也会发生变化,这在绘制菜单的背景颜色时候会带来困难,需要从user32.dll动态链

22、接库中导出该函数。流程图如下: hModule址void*pVoid=(void*)GetProcAddress(hModule,GetMenuBarInfo);pVoid数(FunGetMenuInfo)pVoid)(hwnd,idObject,:FreeLibrary(hModule);资源:FreeLibrary(hModule);资源NYNYHMODULEhModule=:LoadLibrary(user32.dll); 1.5.4 自定义菜单为了使程序界面更加美观,在本系统中自定义了一个菜单,实现菜单的特殊效果显示,如图1.3所示:图1.3 自定义菜单在Visual C+中,实现自定

23、义菜单是比较容易的,MFC类库提供了CMenu类用于设计菜单,用户只要从该类派生一个子类,然后改写MeasureItem方法,设置菜单项的高度和宽度;改写DrawItem方法,根据菜单项的不同状态,绘制不同效果的菜单项就可以了。具体设计如下:(1) 从CMenu类派生一个子类CCustomMenu。(2) 定义一个菜单项结构CMenuItem,记录菜单项的信息。代码如下: /定义一个结构,记录菜单项的详细信息Struct CMenuItem CString m_Menutext; /菜单项的文本 UINTm_ImageIndex; /菜单项图像索引 Int m_MenuType ; / 菜单项

24、的类型 -2:顶层菜单,-1:弹出式菜单,0:分隔条,其他:普通菜单(3) 向CCustomMenu类中添加成员变量。(4) 在CCustomMenu类的构造函数中初始化成员变量。 CCustomMenu:CCustomMenu() m_ItemCount = 0; /初始化菜单项数量 m_Index = 0; /初始化整型变量 m_MenuList = NULL; /初始化菜单列表 m_BkColor = RGB(204,199,186); /初始化背景颜色 m_SelTopColor = RGB(193, 210, 238); /初始化顶层菜单颜色 m_RandColor = FALSE;

25、 /是否采用随机颜色 (5) 在CCustomMenu类的析构函数中释放成员变量占据的堆空间。CCustomMenu:CCustomMenu()if (m_ItemCount 0) /如果菜单项0,则释放菜单列表delete m_MenuList;(6) 向CCustomMenu类中添加GetAllItemCount方法,获取菜单项的数量,当前流程图如下: pMenuCMenu*pMenu=CMenu:FromHandle(hMenu);intemcount=0Multii+iGetMenuItemCount();FirstFindNNNYYY (7) 向CCustomMenu类中添加Atta

26、chMenu方法,附加菜单句柄到CCustomMenu类对象上 BOOL CCustomMenu:AttatchMenu(HMENU hMenu)Attach(hMenu); /附加菜单句柄到菜单对象GetAllItemCount(hMenu,m_ItemCount); /获取菜单项的数量if (m_ItemCount 0) /判断菜单项数量是否0m_MenuList = new CMenuItemm_ItemCount; /创建菜单列表return TRUE; (8)向CCustomMenu类中添加SetMenuItemInfo方法,将每个菜单项关联一个CMenuItem结构对象。(9)向C

27、CustomMenu类中添加GetTopMenuWidth方法,获取顶层菜单的高度。流程图如下:intCount=GetMenuItemCount()im_hWnd,m_hMenu,i,rc);i+returnwidth; NYinti=0(10)向CCustomMenu类中添加GetClientMenuRgn方法,获取菜单栏中的非菜单项区域。流程图如下:/获取菜单栏中非菜单项区域HRGN CCustomMenu:GetClientMenuRgn()MENUBARINFO MenuInfo; /定义菜单项信息对象memset(&MenuInfo,0,sizeof(MENUBARINFO); /

28、初始化菜单项信息MenuInfo.cbSize = sizeof(MENUBARINFO); /设置菜单项信息结构的大小GetMenuBarInfo(AfxGetMainWnd()-m_hWnd,OBJID_MENU,0,&MenuInfo); CRect rc = MenuInfo.rcBar; /获取菜单栏的区域int MenuCount = GetMenuItemCount(); /获取顶层菜单的数量CRect *pRC = new CRectMenuCount; /定义一个区域指针,记录菜单项区域HRGN *pRgn = new HRGNMenuCount;/定义一个选区指针,记录菜单

29、项选区CRect winRC; /定义一个区域对象AfxGetMainWnd()-GetWindowRect(winRC); /获取主窗口区域HRGN retRgn = CreateRectRgn(0,0,0,0);HRGNMenuClientRgn = CreateRectRgn(0,0,0,0); for (int j=0; jMenuCount; j+) /组合菜单项的区域/去除菜单栏中菜单项的区域,以获取非菜单项区域CombineRgn(retRgn,MenuRgn,MenuClientRgn,RGN_DIFF);for ( j=0; jMenuCount; j+)iMenuCount

30、im_hWi+HRGNMenuRgn=CreateRectRgn(rc.left,rc.top,rc.right,rc.bottom);Rgn(rc.left,rc.top,rintj=0CombineRgn(MenuClientRgn,MenuClientRgn,pRgnj,RGN_OR);CombineRgn(MenuClientRgn,MenuClientRgn,,以获取非菜单项区域j+Side by sidejDrawText(strMenuText,Rect,DT_SINGLELINE|DT_VCENTER|DT_LEFT);(12)向CCustomMenu类中添加DrawTopMe

31、nuBk方法,绘制顶层菜单的背景颜色。 (13)向CCustomMenu类中添加DrawSepMenu方法,绘制菜单分隔条。void CCustomMenu:DrawSepMenu(CDC *pDC, CRect Rect) pDC-Draw3dRect(Rect,RGB(255,0,0),RGB(0,0,255); (14)向CCustomMenu类中添加DrawMenuBk方法,绘制菜单项的背景颜色。 void CCustomMenu:DrawMenuBk(CDC *pDC, CRect Rect, COLORREF SrcColor, COLORREF DesColor, BOOL St

32、ate)if (State)pDC-Rectangle(Rect); Rect.DeflateRect(1,1);int r1,g1,b1; /读取渐变起点的颜色值r1 = GetRValue(SrcColor);g1 = GetGValue(SrcColor);b1 = GetBValue(SrcColor);int r2,g2,b2;/读取渐变终点的颜色值r2 = GetRValue(DesColor);g2 = GetGValue(DesColor);b2 = GetBValue(DesColor);float r3,g3,b3;/菜单区域水平方向每个点RGB值应该变化的度(范围)r3

33、= (float)(r2-r1) / (float)(Rect.Height();g3 = (float)(g2-g1)/(float)(Rect.Height();b3 = (float)(b2-b1)/(float)(Rect.Height();COLORREF r,g,b;/菜单区域水平方向每个点的颜色值CPen* pOldPen ;for (int i=Rect.top; iSelectObject(&pen);pDC-MoveTo(Rect.left,i);pDC-LineTo(Rect.right,i);pDC-SelectObject(pOldPen);elsepDC-FillS

34、olidRect(Rect,RGB(0x000000F9, 0x000000F8, 0x000000F7);(15)改写菜单类的MeasureItem虚方法,根据菜单项的文本设置菜单项的宽度。lpStruct-itemWidth = size.cx+25; /设置菜单项的宽度 (16)改写菜单类的DrawItem虚方法,根据菜单项的不同状态,绘制不同效果的菜单。unsigned int m_state = lpStruct-itemState;/获取菜单项的状态CDC* pDC = CDC:FromHandle(lpStruct-hDC); /获取菜单设备上下文CString str = (C

35、MenuItem*)(lpStruct-itemData)-m_MenuText; /获取菜单各项的文本int MenuID = (CMenuItem*)(lpStruct-itemData)-m_MenuType; /获取菜单类型CRect Rect = lpStruct-rcItem; /获取菜单项区域pDC-SetBkMode(TRANSPARENT); /设置透明的背景模式switch(MenuID) /判断菜单类型1.5.5 自定义工具栏在本系统中为了使程序主界面更加美观,自定义了一个工具栏,效果如图1.4所示。图1.4 自定义工具栏自定义工具栏最简单的方法是处理NM_CUSTOMD

36、RAW消息,在其消息处理函数中根据工具栏按钮的不同状态绘制不同效果的工具栏按钮。具体设计步骤如下。l 从CToolBar类派生一个子类,本例为CCustomBar。l 向CCustomBar类中添加变量成员。l 在CCustomBar类的消息映射部分添加ON_NOTIFY_REFLECT映射宏,用于处理NM_CUSTOMRAW消息。l 向CCustomBar类中添加OnOwnerDraw方法,表示NM_CUSTOMDRAW消息的处理方法,用于绘制工具栏按钮。l 向CCustomBar类中添加DrawButton方法,根据工具栏按钮的不同状态,绘制不同效果的工具栏按钮。1.6主要功能模块的设计1

37、.6.1 系统架构设计为了使读者能够对系统文件有更清晰的认识并了解其使用方法,在此设计了文件架构图,如图1.5所示。CMainFrame(系统主界面) 像 图像显示 图像转换 图像处理 字符识别 帮助图1.5 主文件架构图图像显示文件架构图和图像转换文件架构如图1.6和图1.7所示。CShowImage显示位图CShowJPEG显示JPEGCShowGIF显示GIF图像显示图1.6 图像显示文件架构图CBmpToJpeg位图转换为JPEGCJpegToBmpJPEG转换为位图CBmpToGif位图转换为GIF图像转换CGifToBmpGIF转换为位图图1.7 图像转换文件架构图图像处理文件架构

38、图和字符识别文件架构图如图1.8和1.9所示。帮助文件架构图如图1.10所示。CRotationImage图像旋转CBmpSharp图像锐化处理CReverseColor图像反色处理图像处理CGrayHandle灰度化处理CLineArity线性变换图1.8图像处理文件架构图字符识别 CRecNumber 帮助 CAboutDlg 手写数字识别 关于图1.9 字符识别文件架构图 图1.10 帮助文件架构图1.6.2公共模块设计在设计图像效果显示时,有些图像可能比较大,在窗口中不能完全显示出来。为了让用户能够浏览图像,可以单独设计了一个滚动窗口,当控件设置在窗口中,用户可以通过滚动条来浏览控件的

39、各个部分。滚动窗口的设计步骤如下。(1)创建一个对话框,类名为“CImageContainer”,设置对话框的属性。 (2)处理对话框的WM_HSCROLL消息,设置窗口的滚动方向和范围。代码如下:(3)处理对话框的VSCROLL消息,设置窗口的滚动方向和范围。代码如下:case SB_PAGELEFT: /在滚动块的左方空白滚动区域单击,增量为6case SB_PAGERIGHT: /在滚动块的右方空白滚动区域单击,增量为6 (4)处理对话框的WM_MOUSEWHEEL消息,响应鼠标的滚轮事件。代码如下: GetScrollInfo(SB_VERT,&vinfo); /获取滚动条信息int min,max,thumbwidth; min = vinfo.nMin; max = vinfo.nMax; thumbwidth = vinfo.nPage; int pos = GetScrollPos(SB_VERT); /获取垂直滚动条位置 SetScrollPos(SB_VERT,pos-6); /设置垂直滚动条的位置 S

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 研究报告 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服