资源描述
基于VC+的图像处理系统设计与实现VC + + based Image Processing System Design and Implementation摘 要本文对图形图像处理系统的发展现状和所采用的主要技术进行了详细分析,确定了相应的结构和主要功能,以及实际开发中所采取的技术。系统在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 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 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.19目 录摘 要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+iGetMenuItemCount();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()im_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; jMenuCount; j+) /组合菜单项的区域/去除菜单栏中菜单项的区域,以获取非菜单项区域CombineRgn(retRgn,MenuRgn,MenuClientRgn,RGN_DIFF);for ( j=0; jMenuCount; j+)iMenuCountim_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类中添加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; iSelectObject(&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; /获取位图的宽度和高度总结时至今日,论文基本完成。从最初的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,整个制作过程难以用语言来表达。历经了长时间的奋战,紧张而又充实的毕业设计终于落下了帷幕。回想这段日子的经历和感受,我感慨万千,在这次毕业设计的过程中,我拥有了无数难忘的回忆和收获。 毕业设计定下来的时候,我当时便立刻着手资料的收集工作中,当时面对浩瀚的书海真是有些茫然,不知如何下手。在老师细心的指导下,终于使我对自己现在的工作方向和方法有了掌握。 资料已经查找完毕了,我开始着手论文的写作。在写作过程中遇到困难我就及时和导师联系,并和同学互相交流,请教老师。在大家的帮助下,困难一个一个解决掉,论文也慢慢成型。 当我终于完成了所有打字、绘图、排版、校对的任务后整个人都很累,但同时看着电脑荧屏上的毕业设计稿件我的心里是甜的,我觉得这一切都值了。这次毕业论文的制作过程是我的一次再学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。 脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。 在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。 总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。 参考文献:1徐慧.Visual C+数字图像实用工程案例精选.北京:人民邮电出版社 出版年:2004 年3月,P4245页。2耿迅.电脑编程技术与维护之VC+图像处理2006年01期,P2526页。 3杨淑莹.VC+图像处理程序设计.类型.电子书.发布日期:2009年6月24日,P5358页。4谢凤英.VC+数字图像处理基础.北京:电子工业出版社.出版日期:2008年9月,P4448页。5杨阳.VC+图像处理程序设计(第二版).北京:清华大学出版社.出版日期:2007年7月27日,P5056页。6孙鑫.VC+数字图像处理系统.北京:电子工业出版社.出版日期:2005年8月11日,P3244页。7许慧慧.VC+图像处理程序设计.北京:北方交通大学出版社. 出版日期:2005年3月8日,P2225页。8李兰友.王学彬.Visual C+图像处理程序设计实例.北京:国防工业出版社.出版日期:2003年4月,P2729页。9赵丹培VC+图像处理程序设计. 北京:北京交通大学出版社. 出版日期:2005年2月3日, P3748页。10崔莹 王华军.Visual C+数据库实用编程100例.出版社:中国铁道出版社.出版日期:2007年4月,P3542页。
展开阅读全文