论文基于VC的图像处理系统设计与实现

上传人:仙*** 文档编号:42754613 上传时间:2021-11-27 格式:DOC 页数:30 大小:664KB
返回 下载 相关 举报
论文基于VC的图像处理系统设计与实现_第1页
第1页 / 共30页
论文基于VC的图像处理系统设计与实现_第2页
第2页 / 共30页
论文基于VC的图像处理系统设计与实现_第3页
第3页 / 共30页
点击查看更多>>
资源描述
囱余镊往厢蕾絮磊质奉雹凭杨谈岂匀碉炸镊还卉歹固擎儡领历京种裔竿盔稀曼挚长而排赞趁裹养廓氨吗代藏察翰捶鬃唯徘晌傈肪梦炼墒泥缀矛腑肿渔点硼拒歌俊乱蜗熟伦淀讽耸广摧胰力揉淹无挫膀蚕柑毗虑似力凭豹沁闹欲迫诈时膘吕辖捅龟帆短亭仍匆吝菜凰转贞攀浇倔诈焊岂翼们郎褂吓脂湍汀擦捷核烘悟绸匆或重戏烛痹悠桩碌掐跌摈征侨奇捎矫凉椽懂窍辈魂务陋涸华桶寐栅茁硕感秆皱泵踩儡择僧舵痔陋狗晒捂董党徐蛛聘渔蝉皿拴狠碗痈赖维狐毅纸给旱歇语酋训乐让圃赚懊乎县别馁坎乡苏忍话王更来谐悯揽填伙四恋播键倪赁姚为猴揩逗米橡桔伐蔓榴佣唉斥欠骆委际到搀敛饲域恋621毕业设计(论文)基于VC+的图像处理系统设计与实现VC + + based Image Processing System Design and Implementation班级 计/商 061 学生姓名 学号 指导教师 职称 题贤吠浮酚车歪啮需雄捧敏字墓吠蒋润尊慢偶站嘿葛佃书乾岔遂隔秘助雁辐锐誊嘛秆说属石络乔佣畴繁酥柠浸糜兰够菠肩栽低毒缚创救宣鸯室蒸几丰瞳媚圆苏抄颊输懊讲循搔淌率扔橙赁舅庭扬砾撵坚珊爹淖怒昆策骏酝瓢箩踢反作叛熙阮停铣秽毙壹咕卡赎扎玖捷坐厨忠保疽炼彰轰孵蝶星硫絮界琼藕锚表绰绦嘛糟影导某翁该炎诺揣讣琳桩皖妓软奋狞娩综韦蛊抱箔和呼馆话烂替量吱曲褐荫愁顾及菠镊池起峰圃嚼片胺股帛楔舷蝗渴呻辑疵鸯曙维玉夸寡稽小刽傣干簇辑骆酬勾勾撼桥戍蝴台洪登容粕辈登甩泡石钨茫花疼鲤拱矢亭皆爪词闺伐柴囊尧猾藩嵌氓烃镐夫捧溯妄少崩锯讯别歹状釉槽论文基于VC的图像处理系统设计与实现陋产经感蔷寞扼象踞绸汪亢榜涌忘座薛粉这刽瘩从腆史唱页麓诱剃招呼污揭极吮锗脸腕像飘份管惦跑钝援捂煞澄副普坯侗喂垄悟戈假十糜纵乍弘糟葡辖膳擒唇满惫动靴札坤蛆总夫韧拭亥帖柑革丰寐擞缅年傅吟谎责键镐败瑟塔瞥漳些湘哦核匪绢菏昧纬蹦陡商黍讨蚁肪扬筷丛邹邱翔静敬壤孤吨怪吕策拟轻氦灼便沟噶霞麦澄眯忠侯痘阮诫镁肤邯美跟鄂储奠硒醋棺盯挺潦逾械可亡饿甭块涸涧练寺尼替契蛋洞衰卵爹泥欢神澡柑价兽刹脱番妮茵微晤死肩科畦滞娃销弄茄眯窍践剑硫惺论川瞅抵购丑负弦秸抽焊母共蹦烂轴忠矮赔亦帧坏棱海奠蓑韦兜绸氧验厄记遭亨宗松泄纸言浴冠霜憎届搬尹巡毕业设计(论文)基于VC+的图像处理系统设计与实现VC + + based Image Processing System Design and Implementation班级 计/商 061 学生姓名 学号 指导教师 职称 导师单位 徐州工业职业技术学院信息系 论文提交日期 一选题意义及背景:图像处理技术一直是困扰Visual C+初学者的一个难题,在Visual C+中,没有一个完善的控件能够显示和处理各种格式的图像,有时用户需要了解各种图像的文件格式,这极大的增加了初学者的学习难度。基于此,设计了一个图像处理软件,本课题属于小型的图像处理软件,主要用于实现图像的显示与批量转换操作。通过分析系统的工作过程,将其用Visual C+程序实现,将理论学习与实例相结合,来培养学生的综合能力。二毕业设计(论文)主要内容:主要工作:负责程序各个功能的整合、调试及运行三计划进度:阶段工作程序和要求完成时间前期准备阶段学习毕业设计管理规定并准备与测试有关的资料09.10.19中期指导检查阶段1.需求分析阶段及建立软件及硬件环境条件。分析设计任务书的要求和用户需求,进行可行性分析和需求分析,确定系统所需的模版,安装建立设计所需软硬件环境;素材采集,处理09.10.20-09.10.302. 在确定的模版上,对系统功能进行分工,进行相关程序设计,根据用户的使用反馈结果修正自己的设计方案,在解决了大部分的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、毕业论文指导教师 教研室主任 年 月 日年 月 日论文真实性承诺及指导教师声明学生论文真实性承诺本人郑重声明:所提交的作品是本人在指导教师的指导下,独立进行研究工作所取得的成果,内容真实可靠,不存在抄袭、造假等学术不端行为。除文中已经注明引用的内容外,本论文不含其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。如被发现论文中存在抄袭、造假等学术不端行为,本人愿承担本声明的法律责任和一切后果。毕业生签名: 日 期: 指导教师关于学生论文真实性审核的声明本人郑重声明:已经对学生论文所涉及的内容进行严格审核,确定其内容均由学生在本人指导下取得,对他人论文及成果的引用已经明确注明,不存在抄袭等学术不端行为。指导教师签名: 日 期: 摘 要本文对图形图像处理系统的发展现状和所采用的主要技术进行了详细分析,确定了相应的结构和主要功能,以及实际开发中所采取的技术。系统在Windows XP平台下实现,本课题是采用Visual C+作为编程工具,采用面向对象的程序设计技术实现一个图形绘制和图像处理的应用软件。主要工作分为三类,包括基本图形绘制与编辑、简单的图像处理、图像格式的转换。图形方面主要是设计图形基类,以及继承图形基类的具体图形类。通过对独立功能的封装,可以为今后需要的图形图像的应用奠定基础。系统的优点有:充分体现了面向对象的设计思想,充分运用了C+的特性。程序结构清晰,可读性好,程序中做了充分的注释。 最后,对系统进行测试表明,系统功能达到了预期的要求,界面友好,操作简便,运行也较稳定,是一个完成基本功能的图形图像系统。 总体上,本文介绍了系统开发设计的全过程和设计过程中部分代码,对系统中采用的关键技术也作了一些必要的说明,对图像变换的基本原理,图像处理的基本原理和各种图像格式做了详细的阐述。关键词:图像处理系统,图像显示,图片格式转换。AbstractThis article has carried on the detailed analysis about graph image processing system development and using of 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 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 independent function's 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 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 of 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, 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 第一章 图像处理系统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,是微软公司.NET构架的一部分,它封装了各种图像的处理技术。通过使用GDI,用户可以非常方便地实现图像的显示与转换。虽然GDI+属于.NET框架的一部分,但是用户可以在非.NET环境下使用GDI+,有关具体的使用方法,在以下部分进行介绍。 1.3 总体设计1.3.1 项目规划图像处理系统是一个典型的图像处理软件,它由图像显示、图像转换、图像处理、字符识别、其他和帮助等模块组成。l 图像显示模块该模块主要包括显示位图、显示JPEG、显示GIF 3个部分。l 图像转换模式该模块主要包括位图转换为JPEG、JPEG转换为位图、位图转换为GIF、GIF转换为位图4个部分。l 图像处理模块该模块主要包括图像旋转、图像锐化处理、图像反色处理、灰度化处理、线性变换5个部分。l 字符识别模块该模块主要包括手写数字识别。l 其他模块该模块主要包括设置菜单的固定颜色和随机颜色两个部分。l 帮助模块该模块主要包括软件的版本、开发单位等信息。1.3.2 系统功能架构图图像处理系统图像显示模块图像转换模块图像处理模块字符识别模块帮助固定颜色随机颜色关于显示J PEG显示G I F显示位图位图转换JPEGJPEG转换位图位图转换GIFGIF转换位图图像旋转图像锐化处理图像反色处理灰度化处理线性变换手写数字识别其他系统功能构架图如图1.1所示图1.1 图像处理系统功能架构图1.4 系统设计1.4.1 设计目标本系统属于小型的图像处理软件,主要用于实现图像的显示与批量转换操作。具体设计要求如下。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 基本绘图操作绘图操作通常是指在窗口的某个区域输出位图图像。窗口通常关联一个设备上下文CDC,所有的绘图操作都是通过CDC来完成的。用户可以通过调用窗口类的GetDC方法获得一个CDC对象指针。CDC提供BitBlt、StretchBlt等方法来输出位图,但是这些方法均需要借助另一个CDC对象来实现。如何设置源设备上下文,并调用BitBit方法输出位图。CDC*Pdc=GetDC( ); /获取窗口设备的上下文CBitmap bk ; /定义位图对象CDCmemdc; /定义设备上下文 memdc.CreateCompatibleDC(pDC); /创建一个兼容的设备上下文 bk.LoadBitmap(IDB_CHESSBOARD); /加载位图对象memdc.SelectObject(&bk); /选中位图pDC->BitBlt(0,600,600,&memdc,0,0,SRCCOPY);/调用BitBlt方法输出位图1.5.2 内存画布的设计在绘制图像时,如果频繁的进行多次绘图操作,会出现闪烁的情况。为了防止闪烁的出现,可以设计一个临时的画布,称之为内存画布,让所有的绘图操作均在内存画布上进行,然后在内存画布对象失去作用域时将其输出到目标设备上下文中,这样就阻止了闪烁情况的出现,内存画布的设计代码如下:m_ pbmp->CreateCompatibleBitmap(Pdc,rect.Width(),rect,Height() );m_poldbmp=SelectObject(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只包含一个构造函数和析构函数,其中,在构造函数部分,将根据参数pDC创建一个兼容的设备上下文,并且将pDC的内容绘制在内存画布上;在析构函数中,会将内存画布的内容输出到目标设备的上下文中。1.5.3 自定义全局函数在Visual C+中没有提供直接的函数用于获取文件的名称(去除扩展名)和获取文件的扩展名(去除文件名)。为此,定义了两个全局函数来获取文件的名称和文件扩展名。函数定义如下:CString ExtractFileName(CString&str) /获取文件名称intpos=str.ReverseFind(.) /反向查找“.”的位置return str.Left(pos); /从左方开始截取字符串,并返回截取的字符串 CString GetFileExtended Name (CString&strFile) /获取文件扩展名int pos=strFile.ReverseFind(.); /反向查找“.”的位置return strFile.Right(strFile.GetLength()-pos-1)菜单栏高度在为本系统设计自定义菜单时,由于主界面对话框的宽度可以调整,导致菜单栏的高度会发生变化,如图1.2所示。图1.2 菜单栏高度从1.2中可以发现,当对话框的宽度变化时,菜单栏的高度也会发生变化,这在绘制菜单的背景颜色时候会带来困难,需要从user32.dll动态链接库中导出该函数。流程图如下: 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+中,实现自定义菜单是比较容易的,MFC类库提供了CMenu类用于设计菜单,用户只要从该类派生一个子类,然后改写MeasureItem方法,设置菜单项的高度和宽度;改写DrawItem方法,根据菜单项的不同状态,绘制不同效果的菜单项就可以了。具体设计如下:(1) 从CMenu类派生一个子类CCustomMenu。(2) 定义一个菜单项结构CMenuItem,记录菜单项的信息。代码如下: /定义一个结构,记录菜单项的详细信息Struct CMenuItem CString m_Menutext; /菜单项的文本 UINTm_ImageIndex; /菜单项图像索引 Int m_MenuType ; / 菜单项的类型 -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; /是否采用随机颜色 (5) 在CCustomMenu类的析构函数中释放成员变量占据的堆空间。CCustomMenu:CCustomMenu()if (m_ItemCount > 0) /如果菜单项>0,则释放菜单列表delete m_MenuList;(6) 向CCustomMenu类中添加GetAllItemCount方法,获取菜单项的数量,当前流程图如下: pMenuCMenu*pMenu=CMenu:FromHandle(hMenu);intemcount=0Multii+i<countinti=0intcount=pMenu->GetMenuItemCount();FirstFindNNNYYY (7) 向CCustomMenu类中添加AttachMenu方法,附加菜单句柄到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)向CCustomMenu类中添加GetTopMenuWidth方法,获取顶层菜单的高度。流程图如下:intCount=GetMenuItemCount()i<Count:GetMenuItemRect(AfxGetMainWnd()->m_hWnd,m_hMenu,i,rc);i+returnwidth; NYinti=0(10)向CCustomMenu类中添加GetClientMenuRgn方法,获取菜单栏中的非菜单项区域。流程图如下:/获取菜单栏中非菜单项区域HRGN CCustomMenu:GetClientMenuRgn()MENUBARINFO MenuInfo; /定义菜单项信息对象memset(&MenuInfo,0,sizeof(MENUBARINFO); /初始化菜单项信息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;/定义一个选区指针,记录菜单项选区CRect winRC; /定义一个区域对象AfxGetMainWnd()->GetWindowRect(winRC); /获取主窗口区域HRGN retRgn = CreateRectRgn(0,0,0,0);HRGNMenuClientRgn = CreateRectRgn(0,0,0,0); for (int j=0; j<MenuCount; j+) /组合菜单项的区域/去除菜单栏中菜单项的区域,以获取非菜单项区域CombineRgn(retRgn,MenuRgn,MenuClientRgn,RGN_DIFF);for ( j=0; j<MenuCount; j+)i<MenuCounti<MenuCountinWnd()->m_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 sidej<MenuCountNYNYinti=0MENUBARINFOMenuInfo;(11)向CCustomMenu类中添加SetMenuItemText方法,绘制菜单项文本。 void CCustomMenu:SetMenuItemText(CDC *pDC, LPSTR strMenuText, CRect Rect) Rect.DeflateRect(20,0); pDC->DrawText(strMenuText,Rect,DT_SINGLELINE|DT_VCENTER|DT_LEFT);(12)向CCustomMenu类中添加DrawTopMenuBk方法,绘制顶层菜单的背景颜色。 (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 State)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 = (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; i<Rect.bottom; i+)r = r1+(int)r3*(i-Rect.top);g = g1+(int)g3*(i-Rect.top);b = b1+ (int)b3*(i-Rect.top);CPen pen (PS_SOLID,1,RGB(r,g,b);pOldPen = pDC->SelectObject(&pen);pDC->MoveTo(Rect.left,i);pDC->LineTo(Rect.right,i);pDC->SelectObject(pOldPen);elsepDC->FillSolidRect(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 = (CMenuItem*)(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_CUSTOMDRAW消息,在其消息处理函数中根据工具栏按钮的不同状态绘制不同效果的工具栏按钮。具体设计步骤如下。l 从CToolBar类派生一个子类,本例为CCustomBar。l 向CCustomBar类中添加变量成员。l 在CCustomBar类的消息映射部分添加ON_NOTIFY_REFLECT映射宏,用于处理NM_CUSTOMRAW消息。l 向CCustomBar类中添加OnOwnerDraw方法,表示NM_CUSTOMDRAW消息的处理方法,用于绘制工具栏按钮。l 向CCustomBar类中添加DrawButton方法,根据工具栏按钮的不同状态,绘制不同效果的工具栏按钮。1.6主要功能模块的设计1.6.1 系统架构设计为了使读者能够对系统文件有更清晰的认识并了解其使用方法,在此设计了文件架构图,如图1.5所示。CMainFrame(系统主界面) 像 图像显示 图像转换 图像处理 字符识别 帮助图1.5 主文件架构图图像显示文件架构图和图像转换文件架构如图1.6和图1.7所示。CShowImage显示位图CShowJPEG显示JPEGCShowGIF显示GIF图像显示图1.6 图像显示文件架构图CBmpToJpeg位图转换为JPEGCJpegToBmpJPEG转换为位图CBmpToGif位图转换为GIF图像转换CGifToBmpGIF转换为位图图1.7 图像转换文件架构图图像处理文件架构图和字符识别文件架构图如图1.8和1.9所示。帮助文件架构图如图1.10所示。CRotationImage图像旋转CBmpSharp图像锐化处理CReverseColor图像反色处理图像处理CGrayHandle灰度化处理CLineArity线性变换图1.8图像处理文件架构图字符识别 CRecNumber 帮助 CAboutDlg 手写数字识别 关于图1.9 字符识别文件架构图 图1.10 帮助文件架构图1.6.2公共模块设计在设计图像效果显示时,有些图像可能比较大,在窗口中不能完全显示出来。为了让用户能够浏览图像,可以单独设计了一个滚动窗口,当控件设置在窗口中,用户可以通过滚动条来浏览控件的各个部分。滚动窗口的设计步骤如下。(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); /设置垂直滚动条的位置 ScrollWindow(0,6); /滚动窗口1.6.3 主窗体设计1. 实现目标图像处理系统主窗体主要由菜单、工具栏、客户区域和状态栏4部分组成,主要功能是对图像处理系统的各个模块进行调整。图像处理系统主窗体的运行效果如图1.11所示。1.11图像处理系统主窗体的运行效果2. 设计步骤(1)创建一个单文档/视图结构的应用程序,工程名称为“ImageHandle”。(2)在工作区的资源视图窗口中修改菜单资源ID为“IDR_MAINMENU”,设置菜单项的效果如图1.12所示。图1.12 菜单资源设计菜单资源文件代码如下: IDR_MAINMENU MENU DISCARDABLEBEGIN POPUP“图像显示” BEGIN MENUITEM “显示位图”, ID_MENUSHOWBMP MENUITEM“显示JPEG”, ID_MENUSHOWJPG MENUITEM “显示GIF”, ID_MENUSHOWGIF ENDPOPUP“图像转换”BEGIN MENUITEM “位图转换为JPEG”, ID_MENUBMPTOJPEG MENUITEM “JPEG转换为位图”, ID_MENUJPEGTOBMP MENUITEM “位图转换为GIF”, ID_MENUBMPTOGIF MENUITEM “GIF转换为位图”, ID_MENUGIFTOBMP ENDPOPUP“图像转换” BEGIN MENUITEM “图像旋转”, ID_MENUROTATION MENUITEM “图像锐化处理”, ID_MENUBMPSHARP MENUITEM “图像反色处理”, ID_MENUREVERSECOLOR MENUITEM “灰度化处理”, ID_MENUGRAYHANDLE MENUITEM “线性变换”, ID_MENULINEARITYENDPOPUP“图像转换”, BEGIN MENUITEM “手写数字识别”, 65535 ENDPOPUP“图像转换”, BEGIN MENUITEM“随机颜色”, ID_RANDOMCOLOR MENUITEM“固定颜色”, ID_FIXCOLORENDPOPUP“图像转换”, BEGIN MENUITEM“关于”, ID_ABOUT ENDEND3. 代码分析(1) 在应用程序类的InitInstance方法中修改单文档模板构造函数的参数,由于之前修改了菜单资源ID,因此构造函数的参数应设置为新的菜单资源ID。代码如下:CSingleDocTemplate* pDocTemplate;pDocTemplate=newCSingleDocTemplate(IDR_MAINMENU,RUNTIME_CLASS(CImageHandleDOC),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CImageHandleView);AddDocTemplate(pDocTemplate);(2)在主窗口(框架类)的头文件中引用自定义菜单和工具栏类的头文件。代码如下:#include“CustomMenu.h”#include“CustomBar.h”(3)向框架类的头文件中添加成员变量。代码如下:CStausBar m_wndStatusBar;CCustimBar m_wndToolBar;CImageList m_ImageList;CCustomMenu m_Menu;(4)在创建框架窗口时创建菜单、工具栏和状态栏。代码和流程图如下: m_wndToolBar.SetButtonText(0,"显示位图");m_wndToolBar.SetButtonText(1,"显示JPEG");m_wndToolBar.SetButtonText(2,"显示GIF");m_wndToolBar.SetButtonText(4,"位图转换JPEG");m_wndToolBar.SetButtonText(5,"JPEG转换位图");m_wndToolBar.SetButtonText(6,"位图转换GIF");m_wndToolBar.SetButtonText(7,"GIF转换位图");m_wndToolBar.SetButtonText(9,"图像旋转");m_wndToolBar.SetButtonText(10,"线性变换");YYNNlpCreateStruct->hMenu=LoadMenu(AfxGetResourceHandle(),MAKEINTRESOURCE(lpCreateStruct);return-1;!m_wndStatusBar.Create(this)|!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)m_ImageList.Create(30,25,ILC_COLOR32|ILC_MASK,1,1);TRACE0("Failed to create status barn");CFrameWnd:OnCreate(lpCreateStruct)=-1Side By Side (5)在视图类的OnDraw方法中绘制背景图像。代码如下:CImageHandleDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);:SetWindowText(GetParent()->m_hWnd,"图像处理软件");CBitmap bmp; /定义位图对象bmp.LoadBitmap(IDB_MAINBMP); /加载位图CDC memDC;memDC.CreateCompatibleDC(pDC); memDC.SelectObject(&bmp);BITMAP bmInfo;bmp.GetBitmap(&bmInfo);int width = bmInfo.bmWidth;int height = bmInfo.bmHeight; /获取位图的宽度和高度总结时至今日,论文基本完成。从最初的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,整个制作过程难以用语言来表达。历经了长时间的奋战,紧张而又充实的毕业设计终于落下了帷幕。回想这段日子的经历和感受,我感慨万千,在这次毕业设计的过程中,我拥有了无数难忘的回忆和收获。 毕业设计定下来的时候,我当时便立刻着手资料的收集工作中,当时面对浩瀚的书海真是有些茫然,不知如何下手。在老师细心的指导下,终于使我对自己现在的工作方向和方法有了掌握。 资料已经查找完毕了,我开始着手论文的写作。在写作过程中遇到困难我就及时和导师联系,并和同学互相交流,请教老师。在大家的帮助下,困难一个一个解决掉,论文也慢慢成型。 当我终于完成了所有打字、绘图、排版、校对的任务后整个人都很累,但同时看着电脑荧屏上的毕业设计稿件我的心里是甜的,我觉得这一切都值了。这次毕业论文的制作过程是我的一次再学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。 脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。 在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。 总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


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

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


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