基于VC数字图像处理课程设计说明书含源程序_第1页
基于VC数字图像处理课程设计说明书含源程序_第2页
基于VC数字图像处理课程设计说明书含源程序_第3页
基于VC数字图像处理课程设计说明书含源程序_第4页
基于VC数字图像处理课程设计说明书含源程序_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计任务书学生姓名: 专业班级:指导教师: 工作单位:题 目: 初始条件:要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)时间安排:指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日 目录摘要2第一章 引言.31.1基础知识.31.2本数字图像处理界面处理内容介绍.4启动界面.4主界面.4第二章 系统分析.4 2.1设计要求. 4 2.2系统处理流程分析.5第三章 系统设计.5 3.1系统的设计语言.5 3.2系统总体结构设计.5 系统总体结构图.5 系统模块设计.6第四章系统详细设计.74.1基类的设计.74.2 各模块的详细设计.8欢迎界

2、面设计84.2.2主界面设计.9第五章 结论与心得体会19第六章 参考文献.20第七章 关键代码21基于VC+平台简单数字图像处理界面设计摘要:该数字图像处理界面是基于Microsoft Visual C+ 6.0 MFC多文档编程的图像处理界面,实现.bmp格式图像的浏览与编辑,导入和导出,图像特效显示,边缘检测,旋转和翻转图片,图片增强优化,以及打印输出图片。是一款功能较简洁的数字图像管理界面,实现对.bmp格式图像的操作。该界面包含两部分:启动界面和主界面。 BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,一

3、般来说BMP文件分成4个部分:位图头文件,位图信息头,颜色表,位图数据.同时BMP文件文件可以分为DIB格式和DDB格式,其中DIB格式是与设备无关的BMP文件,通用性很强.Windows支持一些重要的DIB访问函数,但都没有封装到MFC中,这里我们封装了一个DIB类,其包含DIB文图处理所需要的基本成员变量和成员函数,进而以该类为基类派生其他类,实现程序的维护和移植,从而利用面向对象的方式实现图像的可视化编程。关键词: BMP文件 图像处理DIB位图 界面 Abstract:The digital image processing interface is based on Microsof

4、t Visual C + + 6.0 MFC multi-document image processing programming interface, to achieve. Bmp format for image browsing and editing, import and export, image effects showed that edge detection, rotate and flip images, pictures enhance the optimization, as well as print output picture. Is a function

5、of the digital image than the simple management interface, to achieve. Bmp format images of the operation. The interface contains two parts: interface and the main interface to start.     BMP file is a Windows operating system and support the recommended image file format, is a memory

6、 or display the compressed image data is not directly based on digital archiving of file formats, BMP files are generally divided into four parts: the first bitmap documents, BITMAPINFOHEADER, color table, the bitmap data. At the same time, BMP file formats and can be divided into DIB format DDB, DI

7、B format which has nothing to do with the equipment of the BMP files, a strong GM. Windows in support of the DIB to visit a number of important function, but are not packaged in the MFC, where we have a package type DIB, the DIB includes Ventura needed to deal with members of the basic variables and

8、 member functions, and such a base class for other types of derivatives, the realization of the procedure maintenance and transplantation, and thus the use of object-oriented way of programming the visual image.Key words: BMP fileImage processingDIB bitmapInterface1 引言数字图像处理(Digital Image Processing

9、)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。数字图像处理最早出现于20世纪50年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。随着计算机的发展,数字图像处理技术也不断的进步,实现了对图像图像增强、复原、编码、压缩等,在空间和军事高科技中扮演越来越重要的角色。随着数字化与多媒体时代的来临,数字图像处理已经成为必备的基础知识。近几十年来由于计算机技术的蓬勃发展,图像处理技术也得到了空前的发展和应用。目前,图像处理技术已经广泛应用于工业、军事、医学、交通、农业、天气预报、银行、超市、重要部门的监控报警系统、可视电话、网络传输

10、等等领域,成为各个学科学习和研究对象。随着图像处理技术的广泛应用,学习和掌握这门科学显得格外重要,图像处理已经成为信息技术相关领域的核心课程。本课题主要实现图像的一些简单特效显示,图像的旋转和镜像、图像的增强处理,图像灰度变换,图像边缘检测等。1.1基础知识组成数字图像的基本单位是像素(Pixel),也就是说数字图像是像素的集合。显示器在显示图像时采用电子枪从左到右扫描一行,为每个像素着色,然后从上倒下扫描整个屏幕的方式,由于人眼的视觉停留,可以显示出完整的画面.为了防止闪烁,每秒电子枪要重复扫描几十次的扫描过程,人眼感受不到因屏幕刷新也产生的闪烁,这种显示器称为位映像设备。所谓位映像,是指一

11、个二维的像素矩阵,矩阵的元素值就是像素的灰度值,而位图就是采用位映像方法显示和存储的图像。彩色图像和灰度图像:灰度图像是数字图像最基本形式,可以从黑白照片数字化得到或则通过对彩色图像去色处理得到,灰度图像只表示图像的亮度信息而没有颜色信息,灰度图像的每个像素点上只包含一个量化的灰度级(0-255)来表示该点的亮度水平,计算机一般用1个字节(8个二进制位)来存储。彩色图像的数据不仅包含亮度信息,还包含颜色信息,图像中每一个像素由RGB(红绿蓝)三个分量组成,计算机一般用3个字节(24位二进制)来存储像素的颜色信息。BMP位图文件结构位图头文件位图信息头颜色表位图数据图1.1 BMP图像文件结构如

12、图1.1所示BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。在编程时它们以结构体类型在计算机中存储。1、位图文件头:主要包含文件类型(必须是0x424D,即字符串“BM”),文件大小以及文件头到实际的位图数据的偏移字节数;2、位图信息头:包含图象的尺寸信息、每个像素所占位数(bit)、图像是否压缩、图像所用的颜色数等信息, 颜色信息包含图像所用到的颜色表,显示图像时需用到这个颜色表来生成调色板;3、调色板(Palette:调色板实际上是一个数组存有RGB 信息的表;4、位图数据:对于用到调色板的位图,图像数据就是该象素颜在调色板中的索引值。对于24位真彩色图,图像数据就是实际的R

13、、G、B三个分量的值。1.2本数字图像处理界面处理内容介绍启动界面为了追求该图像处理的界面的美观性,在设计主界面前,先设计一个欢迎界面,即以一个经过photoshop处理过的图像作为对话框,在运行主界面程序前,先显示该对话框。主界面该数字图像处理界面是基于VC+6.0MFC多文档编程的界面程序,实现数字图像的简单查看与编辑操作。主界面主要内容有:图像文件浏览:实现对.bmp格式图像文件的浏览。图像特效显示:主要有自上而下扫描显示,从左至右的滑动显示和渐进显示。视图-文档的设置:实现了执行操作后新旧图像在不同视图中显示设置。图像的灰度变换:包括图像的二值化,彩色图像转换灰度图像,灰度图像转换8位

14、图像。图像的镜像与旋转变换:包括水平镜像,垂直镜像,顺时针旋转90度,逆时针旋转90度,图像旋转180度。图像的增强处理:主要是图像锐化处理。图像的边缘检测和形态学处理:包括罗伯茨算子边缘检测,图像轮廓提取 该界面主要实现了.bmp格式图像的浏览、编辑、打印、特效设置、视图设置、变换等几大功能。2 系统需求分析需求分析简单地说就是分析用户的需求。需求分析是设计数据库的起点,需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。2.1设计要求 根据设计内容,设计的主要要求有:(1)设计欢迎界面并在程序中实现欢迎界面先于主界面显示;(2)实现

15、主界面的功能设计:图像文件浏览(.bmp格式图像的导入),图像特效显示,视图-文档的设置,图像的灰度变换,图像的镜像与旋转变换,图像的增强处理,图像的边缘检测和形态学处理。2.2系统处理流程分析通过对系统的组织结构和功能进行分析,画出业务流程图,它非常易于阅读和理解,可以帮助我们了解该业务的具体处理过程,发现和处理系统的调查工作中的错误和疏漏,修改和删除原系统的不合理部分。通过对系统的需求分析,系统的基本功能已经确定。整个系统各个模块的业务流,如图2.1所示:开 始欢迎界面主界面图像特效显示图像的灰度变换图像边缘检测和形态学处理图像的增强处理图像的镜像与旋转变换图2.1业务流程图3系统设计本阶

16、段的主要任务是设计程序的体系结构,确定程序组成模块,以及各模块之间的关系。3.1系统的设计语言数字图像处理系统采用Microsoft Visual C+ 6.0MFC作为开发平台。 3.2系统总体结构设计 系统总体结构图数字图像处理界面的总体结构设计如图3.1所示:主界面文件操作镜像与旋转灰度变换另存为操作打开操作关闭操作保存操作垂直镜像变换顺时针旋转90度新建操作水平镜像变换灰值化打印操作二值化特效显示扫描显示渐进显示滑动显示逆时针旋转90度 启动界面数字图像处理界面256色->8位图图像锐化图 3.1 数字图像处理界面总体结构设计 系统模块设计模块设计是对处理流程图的注释性书面文件,

17、以帮助程序设计人员进一步了解模块的功能和设计要求数字图像处理系统主要分为两大模块,即欢迎界面和主界面,其中主界面又分为文件操作模块,特效显示模块,图像镜像与旋转模块,图像增强处理模块,图像边缘检测和形态学处理模块。具体的模块设计如下: 1.欢迎界面:该模块实现以一个经过photoshop处理过的图像作为对话框,在运行主界面程序前,先显示该对话框。2.主界面:(1)文件操作模块:该模块主要实现图像的文件操作,包括新建操作,打开操作.保存操作,另存为操作,关闭操作,打印操作等。(2) 特效显示模块:该模块实现了图像在视图中的显示方式,包括自上而下扫描显示,从左至右的滑动显示和渐进显示。 (3)图像

18、镜像与旋转模块:该模块实现了图像的镜像变换和图像旋转显示,包括水平镜像,垂直镜像,顺时针旋转90度,逆时针旋转90度,图像旋转180度。 (4)图像增强处理模块:该模块主要实现了图像锐化效果。(5)图像边缘检测模块:该模块实现了图像边缘轮廓检测,包括罗伯茨算子边缘检测,图像轮廓提取。(6)图像灰度变换模块:该模块实现了彩色图像变灰度格式,灰度图像变彩色格式和二值化操作。4 系统详细设计 4.1基类的设计BMP文件是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,同时BMP文件文件可以分为DIB格式和DDB格式,其中DIB格式是

19、与设备无关的BMP文件,通用性很强。Windows支持一些重要的DIB访问函数,但都没有封装到MFC中,这里我们封装了一个DIB类,其包含DIB位图处理所需要的基本成员变量和成员函数,进而以该类为基类派生其他类,实现程序的维护和移植。在这里我们命名这个基类为ImgCenterDib,各种算法的实现都是以ImgCenterDib类为基类派生出来。根据前面预备知识和程序编写的需要,这里定义ImgCenterDib类代码如下:class ImgCenterDibpublic: unsigned char * m_pImgData; /图像数据指针 LPRGBQUAD m_lpColorTable;

20、/图像颜色表指针int m_nBitCount; /每像素占的位数private: LPBYTE m_lpDib; /指向DIB的指针 HPALETTE m_hPalette; /逻辑调色板句柄int m_nColorTableLength; /颜色表长度(多少个表项)protected: int m_imgWidth; /图像的宽,像素为单位int m_imgHeight; /图像的高,像素为单位LPBITMAPINFOHEADER m_lpBmpInfoHead; /图像信息头指针public: ImgCenterDib();/不带参数的构造函数ImgCenterDib(CSize siz

21、e, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData); /带参数的构造函数ImgCenterDib();/析构函数CSize GetDimensions();/获取DIB的尺寸(宽高)BOOL Read(LPCTSTR lpszPathName); /DIB读函数 BOOL Write(LPCTSTR lpszPathName); /DIB写函数BOOL Draw(CDC* pDC, CPoint origin, CSize size); /显示DIBvoid ReplaceDib(CSize size, int

22、nBitCount, LPRGBQUAD lpColorTable,unsigned char *pImgData); /用新的数据替换DIBint ComputeColorTabalLength(int nBitCount); /计算颜色表的长度private:void MakePalette();/创建逻辑调色板void Empty();/清理空间 ;同时将各个模块函数封装起来成为一个类,这些类都以ImgCenterDib类共有继承,在主程序中调用,减少代码的重复性,提高利用率。派生关系如图4.1:基类ImgCenterDib(public)派生的特效显示类:SpecialEffectSh

23、ow派生的灰度变换类:GrayTrans派生的图像增强类:Pic_Enhance派生的几何变换类:GeometryTrans派生的图像边缘检测类: Pic_Segment 图4.1 基类与派生类结构关系图4.2 各模块的详细设计4.2.1欢迎界面设计用photoshop软件根据内容的需要处理一张图片,并保存为.bmp格式,然后在Microsoft Visual C+ 6.0中载入该图片。设计思想:欢迎界面在程序运行时是以图形式显现的,这里要封装一个位图的类Cbtmap(派生于位图类CBitmap),获取图像的宽,高,创建逻辑调色板等等;之后创建一个启动窗口类,名为Csplash(派生于窗口基类

24、CWnd),这两个类均封装了一些函数,它们之间通过参数传递和函数调用,在主程序代码中声明Splash类的对象,调用Csplash类中函数从而实现设计目标。启动窗口类的主要代码如下:class Csplash : public CWndpublic:    Csplash();/构造函数public:    void Create( UINT nBitmapID );/调用CreateEx创建窗口public:    virtual Csplash();/析构函数protected:  

25、  /AFX_MSG(CWzdSplash)    afx_msg void OnPaint();    /AFX_MSG    DECLARE_MESSAGE_MAP()private:    Cbtmap m_bitmap;/私有成员变量;位图类的主要代码如下:class Cbtmap : public CBitmap public:    DECLARE_DYNAMIC(Cbtmap)Cbtmap();void LoadBitma

26、pEx(UINT nID, BOOL bIconBkgrd );    CPalette *GetPalette()return m_pPalette;public:    virtual Cbtmap();intm_Width;    int m_Height;private:    CPalette *m_pPalette;在CPicture_sysView:CPicture_sysView()函数中加入如下代码:Csplash wndSplash; /声明Splash类

27、的对象wndSplash.Create(IDB_WZDSPLASH); /调用Create()wndSplash.UpdateWindow();Sleep(2000);/定时2秒程序运行截图如下:(欢迎界面)4.2.2主界面设计(1)文件操作模块文件操作模块是整个系统中最基本的组成成分,该模块主要实现图像的文件操作,包括新建操作,打开操作.保存操作,另存为操作,关闭操作,打印操作。通过对用户的需求分析得出文件操作模块的功能结构图,文件操作模块的功能结构图如图4.2所示:文件操作模块打开操作新建操作图像保存图像打印另存为操作关闭操作图 4.2 文件操作模块功能结构图在文件操作模块,新建操作,关闭

28、操作和图像打印操作可以直接调用系统提供的不需要重载的函数很容易就实现,其他操作都需要将文件下的.bmp格式的图像数据读进计算机内存中生成DIB, 存放在m_lpDib(指向DIB的指针)所指向的缓冲区。文件打开操作的伪代码描述如下所示: 文件的另存为操作伪代码如下:取得文件路径名称;调用ImgCenterDib的write函数读图形入内存中;判断读操作是否成功,若成功设置标记并返回True,否则返回FALSE取得文件路径名称;调用ImgCenterDib的Read函数读图形入内存中;判断读操作是否成功,若成功设置标记并返回True,否则返回FALSE功能截图如下: 菜单栏:另存为操作:(2)特

29、效显示模块特效显示模块实现了图像在视图中的显示方式,包括自上而下扫描显示,从左至右的滑动显示和渐进显示。经过分析图像特效显示功能,得出图像处理的功能模块图如图4.3所示:特效显示模块扫描显示渐进显示滑动显示 图4.3特效显示模块功能结构图特效显示类SpecialEffectShow是在基类ImgCenterDib基础上派生出来的,特效显示类设计代码如下:class SpecialEffectShow : public ImgCenterDib public:SpecialEffectShow(CSize size, int nBitCount, LPRGBQUAD lpColorTable,

30、unsigned char *pImgData);/带参数的构造函数void Scan(CDC*pDC);/扫描特效显示void Slide(CDC*pDC);/滑动特效显示void FadeIn(CDC * pDC);/渐进特效显示virtual SpecialEffectShow();protected:SpecialEffectShow();/防止从外部访问无参数的构造函数;利用类向导,给相应的控件定义消息处理函数,如下表表1主要的消息处理函数表序号ID号及类名消息处理函数函数功能1ID_scanOnscan扫描显示2ID_slideOnslide滑动显示3ID_FadeinOnFade

31、in渐进显示在picture_sysView.cpp重载消息处理函数,这三个消息处理函数代码基本相似,共同操作伪代码如下:获取文档类中m_dib的指针,访问当前DIB数据;定义SpecialEffectShow类的对象SpShow,用当前DIB数据为其初始化;获得设备环境变量;传递设备环境指针,调用滑动/扫描/渐进显示程序;功能截图如下:扫描显示:滑动显示:渐进显示(3)图像灰度变换模块图像灰度变换模块实现了彩色图像变灰度格式,灰度图像变彩色格式和二值化操作。经过分析图像灰度变换功能,得出图像处理的功能模块图如图4.4所示:灰度变换模块块二值化灰度变彩色格式彩色变灰度格式图4.4 灰度变换模块

32、功能结构图灰度变换类GrayTrans是在基类ImgCenterDib基础上派生出来的, 灰度变换类设计代码如下:class GrayTrans:public ImgCenterDibpublic:int m_nBitCountOut; /输出图像每像素位数unsigned char * m_pImgDataOut; /输出图像位图数据指针LPRGBQUAD m_lpColorTableOut; /输出图像颜色表private:int m_imgWidthOut; /图像的宽,像素为单位int m_imgHeightOut; /图像的高int m_nColorTableLengthOut;/输

33、出图像颜色表长度public:GrayTrans();/不带参数的构造函数GrayTrans(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData);/带参数的构造函数GrayTrans();CSize GetDimensions();/以像素为单位返回输出图像的宽和高void ColorToGray();/彩色变灰度格式void GrayToColor();/灰度变彩色格式void Binary(int threshold=128);/二值化;利用类向导,给相应的控件定义消息处理函数,如下表表2主

34、要的消息处理函数表序号ID号及类名消息处理函数函数功能1ID_TOGRAYOnTogray彩色变灰度格式2ID_GraytocolorOnGraytocolor灰度变彩色格式3ID_BinTwoOnBinTwo二值化在picture_sysView.cpp重载消息处理函数,这三个消息处理函数代码基本相似,共同操作伪代码如下:获取文档类中m_dib的指针,访问当前DIB数据;判断灰度图像还是彩色图像;分别定义GrayTrans类的对象,调用相应的函数;建立一个新视图,显示分割结果;功能截图如下:彩色变灰度格式:灰度变彩色格式:二值化:(4)图像镜像与旋转模块镜像与旋转模块图像镜像与旋转模块实现了

35、图像的镜像变换和图像旋转显示,包括水平镜像,垂直镜像,顺时针旋转90度,逆时针旋转90度,图像旋转180度。其功能模块图如图4.5所示:旋转180度水平镜像垂直镜像顺时针旋转90逆时针旋转9090图4.5图像镜像与旋转模块功能结构图镜像与旋转类GeometryTrans是在基类ImgCenterDib基础上派生出来的。该类与灰度变换类GrayTrans有相同的成员变量,其成员函数除CSize GetDimensions()函数外变为:GeometryTrans();GeometryTrans(CSize size, int nBitCount, LPRGBQUAD lpColorTable,

36、unsigned char *pImgData); /带参数的构造函数GeometryTrans();void Move(int offsetX, int offsetY); /平移void MirrorHori();/水平镜像void MirrorVerti();/垂直镜像void Clockwise90();/顺时针旋转90度void Anticlockwise90();/逆时针旋转90度void Rotate180();/旋转180利用类向导,给相应的控件定义消息处理函数,如下表表3主要的消息处理函数表序号ID号及类名消息处理函数函数功能1ID_XmirrorOn Xmirror水平镜像

37、2ID_YmirrorOn Ymirror垂直镜像3ID_Clock90On Clock90顺时针旋转90度4D_AnticClock90On AnticClock90逆时针旋转90度5ID_Clock180On Clock180旋转180度在picture_sysView.cpp重载消息处理函数,这五个消息处理函数代码基本相似,共同操作伪代码如下:获取文档类中m_dib的指针,访问当前DIB数据;判断灰度图像或者彩色图像;分别定义GeometryTrans类的对象,调用相应的函数;建立一个新视图,显示分割结果;功能截图如下: 水平镜像: 垂直镜像:顺时针旋转90度: 逆时针旋转90度:旋转1

38、80度:(5)图像增强处理模块图像增强处理模块主要实现了图像锐化效果,是模糊的图像变得更加清晰,颜色变得鲜明突出,更适合人眼观察和识别。图像增强处理类Pic_Enhance是在基类ImgCenterDib基础上派生出来的, 图像增强处理类设计代码如下:class Pic_Enhance:public ImgCenterDib public:int m_nBitCountOut;unsigned char * m_pImgDataOut;LPRGBQUAD m_lpColorTableOut;int m_nColorTableLengthOut;public:Pic_Enhance();Pic_

39、Enhance(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData);Pic_Enhance();void GradSharp(BYTE bThre); /梯度锐化;利用类向导,给相应的控件定义消息处理函数,如下表表4主要的消息处理函数表序号ID号消息处理函数函数功能1ID_RuihuaOnRuihua图像锐化获取文档类中m_dib的指针,访问当前DIB数据;判断是否是灰度图像,若是进行下一步,否则警告;定义Pic_Enhance类的对象,调用GradSharp函数;建立一个新视图,显示操作结果;

40、在picture_sysView.cpp重载消息处理函数,伪代码叙述如下:功能截图如下:(6) 图像边缘检测模块图像边缘检测模块实现了图像边缘轮廓检测, 包括罗伯茨算子边缘检测,图像轮廓提取,其功能模块图如图4.6所示:图像边缘检测模块图像轮廓提取罗伯茨算子边缘检测图4.6图像边缘检测模块功能结构图图像边缘检测类Pic_Segment是在基类ImgCenterDib基础上派生出来的。该类与灰度变换类GrayTrans有相同的成员变量,其成员函数除CSize GetDimensions()函数相同,其他的成员函数如下:Pic_Segment();Pic_Segment(CSize size, i

41、nt nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData); /带参数的构造函数Pic_Segment();void Roberts();/Roberts算void ContourExtract();/轮廓提取利用类向导,给相应的控件定义消息处理函数,如下表表5主要的消息处理函数表序号ID号消息处理函数函数功能1ID_RobertsOn Roberts罗伯茨算子2ID_OutlineOn Outline轮廓提取在picture_sysView.cpp重载消息处理函数,这2个消息处理函数代码基本相似,共同操作伪代码叙述如下:获取文

42、档类中m_dib的指针,访问当前DIB数据;判断是否是灰度图像(二值图像),若是进行下一步,否则警告;在消息函数定义Pic_Segment类的1个对象segmen,调用Roberts(或ContourExtract)函数;建立一个新视图,显示操作结果;功能截图如下:罗伯茨算子:轮廓提取:5 结论与心得体会这次课程设计是以Microsoft Visual C+ 6.0 文档视图编程为基础实现的,这就要求对MFC文档视图操作有一定的了解和操作编程能力,在做课程设计前,我查阅了该方面相关的书籍,对我完成欢迎界面和主界面的设计有很大的帮助。编程中在不同类之间函数参数和变量的传递和函数的调用出了问题,但

43、是理清函数的编译编译顺序和变量的类型这些问题都逐一解决,同时增强了对工具栏,菜单栏的手动操作能力。 另外一点是对.bmp图像处理的实现,数字图像处理关键是算法的设计思想和算法的实现,通过这次课程设计,使我了解到了算法设计的重要性(算法设计是编程实现的前提),提高了自己动手编程的能力和汲取一些先进算法的思想,这对以后图像处理的深入学习大有帮助。 该数字图像界面是基于Microsoft Visual C+ 6.0的MFC多文档实现的,在界面设计上看起来过于单调,界面设计简单,但易于操作;Visual C+ 6.0的MFC对话框的编程是界面看起来更加美观,更接近软件系统,给人不一样的感觉,提高了工具

44、栏和菜单栏的编程实现难度和设计的复杂度,这是今后学习的方向。6.参考文献1郑莉 董渊 张瑞丰, C+语言程序设计(第三版), 清华大学出版社 20032David J.Kruglinski(美)等, Visual C+ 6.0技术内幕,北京希望电子出版社,20023谢凤英 赵丹培,Visual C+ 数字图像处理,电子工业出版社,20084求是科技 张宏林,精通Visual C+ 数字图像处理典型算法及实现,人民邮电出版社,20085刘锐宁 宋坤等,Visual C+从入门到精通,清华大学出版社,2008关键源代码:/ImgCenterDib.cpp/ImgCenterDib:ImgCente

45、rDib() /缺省变量的构造函数 m_lpDib=NULL;/初始化m_lpDib为空。 m_lpColorTable=NULL;/颜色表指针为空 m_pImgData=NULL; / 图像数据指针为空 m_lpBmpInfoHead=NULL; / 图像信息头指针为空 m_hPalette = NULL;/调色板为空ImgCenterDib:ImgCenterDib(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData) if(pImgData=NULL)/没有位图数据传入,DIB为空m_lpD

46、ib=NULL;m_lpColorTable=NULL;m_pImgData=NULL; m_lpBmpInfoHead=NULL; m_hPalette = NULL;elsem_imgWidth=size.cx;m_imgHeight=size.cy;m_nBitCount=nBitCount; m_nColorTableLength=ComputeColorTabalLength(nBitCount);/根据每像素位数,计算颜色表长度int lineByte=(m_imgWidth*nBitCount/8+3)/4*4; int imgBufSize=m_imgHeight*lineBy

47、te;/位图数据缓冲区的大小(图像大小) m_lpDib=new BYTE sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableLength+imgBufSize;/为m_lpDib一次性分配内存,生成DIB结构/填写BITMAPINFOHEADER结构m_lpBmpInfoHead = (LPBITMAPINFOHEADER) m_lpDib;m_lpBmpInfoHead->biSize = sizeof(BITMAPINFOHEADER);m_lpBmpInfoHead->biWidth = m_imgWidth

48、;m_lpBmpInfoHead->biHeight = m_imgHeight;m_lpBmpInfoHead->biPlanes = 1;m_lpBmpInfoHead->biBitCount = m_nBitCount;m_lpBmpInfoHead->biCompression = BI_RGB;m_lpBmpInfoHead->biSizeImage = 0;m_lpBmpInfoHead->biXPelsPerMeter = 0;m_lpBmpInfoHead->biYPelsPerMeter = 0;m_lpBmpInfoHead->

49、;biClrUsed = m_nColorTableLength;m_lpBmpInfoHead->biClrImportant = m_nColorTableLength;m_hPalette = NULL;if(m_nColorTableLength!=0) /若有颜色表,则将颜色表拷贝进DIB的颜色表位置m_lpColorTable=(LPRGBQUAD)(m_lpDib+sizeof(BITMAPINFOHEADER); memcpy(m_lpColorTable,lpColorTable,sizeof(RGBQUAD) * m_nColorTableLength);/颜色表拷贝

50、 MakePalette();/创建逻辑调色板 m_pImgData = (LPBYTE)m_lpDib+sizeof(BITMAPINFOHEADER)+ sizeof(RGBQUAD) * m_nColorTableLength;/用m_pImgData指向DIB位图数据起始位置 memcpy(m_pImgData,pImgData,imgBufSize);/拷贝图像数据进DIB位图数据区ImgCenterDib:ImgCenterDib()/析构函数,释放资源if(m_lpDib != NULL) delete m_lpDib; if(m_hPalette != NULL):Delete

51、Object(m_hPalette);/如果有调色板,释放调色板BOOL ImgCenterDib:Draw(CDC* pDC, CPoint origin, CSize size)/显示DIB位图 HPALETTE hOldPal=NULL;/旧的调色板句柄 if(m_lpDib = NULL) return FALSE; if(m_hPalette != NULL) hOldPal=:SelectPalette(pDC->GetSafeHdc(), m_hPalette, TRUE);pDC->SetStretchBltMode(COLORONCOLOR);/设置位图伸缩模式:StretchDIBits(pDC->GetSafeHdc(), origin.x

温馨提示

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

评论

0/150

提交评论