基于mfc的图片浏览器的设计与实现-毕业论文内容摘要:
在载入图片时,提供“从上往下”、“从下往上”、“从左往右”、“从右往左”、“左上进入”、“左下进入”、“右上进入”、“右下进入”、“马赛克”、“百叶窗”等显示效果,并且可以由用户选择是否使用及使用哪个效果,用户也可以选择让系统随机选择效果。 在查看图片时,用户也可以让软件随时显示“水平百叶窗”、“垂直百叶窗”、“马 赛克”、“向上扫描”、“向下扫描”等效果。 在查看图片时,可以选择从当前目录中删除该图片,并将其放入系统回收站中。 在窗口的用户区右键单击鼠标,则弹出快捷菜单,显示常用的操作命令。 10 在查看图片时,标题栏显示当前打开的图片的文件名;状态栏从左到右依次显示图片的全路径、当前的显示比例、图片文件的大小( KB)、图像的大小、鼠标当前的坐标。 性能需求 ( 1)硬件平台要求 由于本软件为单机软件,不 需进行大量的数据读写和数据交换,故对系统硬件配置的要求并不高,只要能够平稳运行 Windows 操作系统的硬件平台 ,都能够使用本软件。 提示:软件提供的显示特效,由于其需要相对较为大量的运算,故对 CPU 性能要求较高,要想获得理想的效果,建议 CPU 为 PIII 800MHz 以上。 ( 2)软件环境要求 本软件运行平台为 Microsoft Windows 98/Me/NT/2020/XP/2020。 总体设计 在对整个开发系统进行全面分析调查的基 础上,制定出应用软件的总体设计规划,这对建立一个应用系统来说是必须的,也是全面展开开发工作的重要基础。 系统总体设计包括:模块的划分和软件界面设计。 模块划分 本设 计的实现基于微软的 MFC 应用程序框架,故软件也采用了文档( Document) /视图( View)结构,并使用单文档界面( Single Document Interface,简称 SDI)。 程序框架在响应它生成的标准用户接口“打开”命令时创建文档 /视图结构,由于软件只需提供浏览的供能,因此将生成的标准框架中的“新建”命令禁用,其创建次序如下。 步骤 1: 程序启动时, WinMain()函数调用应用程序对象的 InitInstance()函数,并在其中创建文档模板。 步骤 2: 程序运行过程中,选择“文件” |“打开”命令,框 架将调用 CWinApp::OnFileOpen()函数,并使用已创建的文档模板创建文档。 步骤 3: 文档模板创建主框架窗口。 步骤 4: 主框架窗口创建文档对应的视图。 程序中文档 /视图结构的各对象交互关系如图 1 所示。 11 文档模板 G e tDo c T e m p late ( ) 文档 G e tF irstV iew P o sitio n ( )/ G e tNe x tV iew ( ) 视图 G e tDo c u m e n t () G e tA c ti v e V iew ( ) 主框窗口 G e tA c ti v e Do c u m e n t () G e tP a ren tF ram e ( ) 图 1 文档 / 视结构对象交互关系 图 1 文档 /视图结构对象交互关系 以 MVC( ModelViewController) 应用程序结构 划分的模块如图 2 所示。 软件界面设计 根据软件的需求分析及图片浏览软件的特点,本设计中软件采用单文档界面( SDI),包括标准菜单 、工具栏和状态栏。 工具栏上为常用菜单命令按钮,如“打开”、“保存”、“上一张”、“下一张”、“放大”、“缩小”、“旋转”等。 另外,在全屏显示时提供浮动工具栏,并且在用户区右击鼠标可以弹出快捷菜单。 P i ct ure V i ew er Mo de l V i ew C on t rol l er 图像解码、编码模块 图像显示模块 图像变换模块 PCX解码 /编码模块 TGA解码 /编码模块 BMP解码 /编码模块 JPEG模块 GIF模块 OnDraw () 状态栏信息显示 图像缩放模块 图像旋转模块 全屏浏览模块 图像显示模块 图 2 软件模块划分 12 软件在非全屏状态下的整体页面如图 3 所示。 图 3 非全屏状态整体页面 软件菜单及工具栏如图 4 所示。 图 4 软件菜单及工具栏 软件在 全屏状态下的浮动工具条及右键菜单如图 5 所示。 图 5 全屏状态下的浮动工具条及右键菜单 详细设计 13 详细设计的工作包括处理过程和代码设计,即根据总体设计的每个功能模块的要求,利用相应的开发工具设计出应用系统的过程。 由于篇幅的限制,在这里不给出全部的程序编码,只给出软件核心数据结构 LanImage 类、 BMP 解码 /编码模块、 PCX 解码 /编码模块、 TGA 解码 /编码模块、 JPEG 解码 /编码模块、 GIF 解码 /编码模块、图像显示模块、全屏浏览模块、图像缩放模块以及图像旋转模块的设计。 软件核心数据结构 LanImage 类 由上面对图像格式的分析可知,不同的图像格式,其解码和编码方式有相当大 的区别,故将不同图像的解码、编码划分为单独的模块;然而,不论原图像是何种格式,在解码之后都会暂时以 RGB 的颜色数据存储在内存中的一块缓冲区中。 图像的显示模块及变换模块也就是针对此缓冲区的数据进行操作。 因此,设计一个 LanImage 类,其中包含一个字节型指针,指向图像解码后的数据;该类中还包含图像显示和变换所必需的属性以及对图像进行操作的方法。 由于图像的显示是在程序的视图( View)中完成的,为了便于访问 LanImage 中的方法和属性,将 LanImage 类作为 View 类(本程序中为 CPictViewView)的公有成员。 LanImage 类的详细设计代码如下: class LanImage { public: BYTE * m_pImage。 //指向图像解码后数据缓冲区的指针 CJpeg* m_pJpeg。 //CJpeg 类对象指针 CGif* m_pGif。 //CGif 类对象指针 int m_nWidth。 //图像实际宽度 int m_nHeight。 //图像实际高度 int m_nDrawWidth。 //图像显示宽度 int m_nDrawHeight。 //图像显示高度 int m_nBitCount。 //图像每像素占用的位数 int m_nPitch。 //解码后数据一个扫描行所占字节数 int m_nImage。 //图像数据的字节数 int m_nPalette。 //调色板中颜色个数 long nFileSize。 //图像文件大小 // //当被旋转时保存原来的图像可能被改变的信息 BYTE * m_pOriginImage。 14 Int m_nOriginWidth。 Int m_nOriginHeight。 Int m_nOriginPitch。 Int m_nOriginImage。 BOOL m_bBufferIsOriginal。 // BOOL m_bReadWithLibSupport。 //是否使用 JPEG 及 GIF 库中的方法 RGBQUAD *m_pPal。 //指向调色板区域的指针 LanFormat m_eFmt。 //标志图像数据的存储方式 ifdef UC_USE_DC //是否使用 DC,如果使用则图像解码后 HBITMAP m_hBitmap。 //的缓冲区使用位图格式 endif public: LanImage() //构造函数 { memset(this,0,sizeof(LanImage))。 m_bReadWithLibSupport=FALSE。 m_pJpeg=NULL。 m_pGif=NULL。 m_pPal=NULL。 } ~LanImage() //析构函数 { ifdef UC_USE_DC if(m_hBitmap) DeleteObject(m_hBitmap)。 //m_hBitmap 中包含了 m_pImage 最初指向的区域 else if(m_bReadWithLibSupport) //如果使用了 Lib Sources,这时 m_pImage 指 //向的是原来 CJpeg 类的一部分空间, m_pImage=NULL。 //而该类已摧毁,故那部分空间已由其收回。 delete [] m_pImage。 m_pImage=NULL。 endif delete m_pJpeg。 m_pJpeg=NULL。 15 delete m_pGif。 m_pGif=NULL。 if(m_pPal) { delete [] m_pPal。 m_pPal=NULL。 } } BOOL LoadImage(LPCTSTR pszFileName,int ndegree,BOOL isconvert)。 //载入图像函数 BOOL Create(int nWidth,int nHeight,int nBitCount,int ndegree, LanFormat eFmt=LanF_Unkown)。 //创建图像解码后的缓冲区 BOOL ReadBmp(LPBYTE pBuffer,UINT uLength,int ndegree,BOOL isconvert)。 BOOL ReadTga(LPBYTE pBuffer,UINT uLength,int ndegree)。 BOOL ReadPcx(LPBYTE pBuffer,UINT uLength,int ndegree)。 BOOL SaveBmp(LPCTSTR pszFileName)const。 BOOL SaveTga(LPCTSTR pszFileName)const。 BOOL SavePcx(LPCTSTR lpstrFileName, CDib* pDib)。 //图像显示函数 BOOL Draw(HDC hdc,int nDx,int nDy,int nDw,int nDh, int nSx,int nSy,int nSw,int nSh,UINT uFlags=0)const。 BYTE * GetLine(int nLine) //取得扫描行中一行的数据 { return m_pImage+m_nPitch * nLine。 } }。 //类 LanImage BMP 解码 /编码模块 上面的内容已经对 BMP 图像的存储格式进行了分析。 BMP 图像的解码由 LanImage 类中的 ReadBmp()函数实现,其中 缓冲区的创建调用了 LanImage::Ceate()函数。 对于 BMP图像,去掉 BMP 文件头、信息头之后就是图像的数据信息。 可以直接将其读出并放入缓冲区中。 ReadBmp()函数中读取图像数据信息的代码如下: BYTE * pTemp=GetLine(m_nHeight1)。 for(int i=0。 i。 ++i) { memcpy。基于mfc的图片浏览器的设计与实现-毕业论文
相关推荐
来逼近理想低通滤波器。 “最平响应”即由此而来。 ( 2)通带,阻带下降的单调性。 这种滤波器具有良好的相频特性。 ( 3) 3dB 的不变性:随着 N 的增加,频带边缘下降越陡峭,越接近理想特性,但不管 N 是多少,幅频特性都通过 3dB 点。 当Ω≥ c 时,特性以 20NdB/dec 速度下降。 图 不同阶数 N 的巴特沃斯滤波器特性 现根据式( )求巴特沃斯滤波器的系统函数 Ha(
2 Moodle 概述 5 的公益性和社会性与自由软件的精神相得益彰, Moodle 社群中除了有开发者,还有大量的教师和学生,来自他们的反馈和建议是 Moodle 茁壮成长的沃土,这是很多商业公司求之不得的宝贵财富,再加上自由软件所共有的免费获取、跨平台支持及优秀的国际特性,促进了 Moodle 的迅速成长。 3 Moodle 结构分析 6 3 Moodle 结构分析 Moodle 的
ucTemp = P2INamp。 0x0F。 Delay_Nms(20)。 if(ucTemp != 0x0F) {//判断该列是否有按键按下 Delay_Nms(15)。 if(ucTemp==(P2INamp。 0x0F)) { switch(ucTemp)//如果有,则判断行号 四川理工学院挑战杯论文 第 16 页 共 32 页 { case 0x0E: ucLine=1。 break。
dula=0。 //关闭断选 P0=0xff。 //送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位锁存端造成混乱 wela=1。 //打开位选 P0=0xfd。 //送位选数据 wela=0。 //关闭位选 delayms(5)。 //延时 display(bai,shi,ge)。 } } void display(uchar bai, uchar shi,uchar ge)
优化企业生产经营中的各个环节。 下面是几种组态软件的介绍: (1)InTouch: Wonderware的 InTouch软件是最早进入我国的组态软件。 在 80年代末、90年代初,基于 Windows3. 1的 InTouch软件曾让我们耳目一新,并且 InTouch提供了丰富的图库。 但是,早期的 InTouch软件采用 DDE方式与驱动程序通信,性能较差,InTouch7.
度到 保持温度 降低蒸汽压力到 保持蒸汽压力 降低蒸汽压力到 其中操作顺序用下拉式菜单按以上几种选取。 D.参数设定报表 4 使用胶料名称、硫化热量参数(等效硫化参数) ( 7)输出报表: A. 按生产年份、生产月份、硫化日期分别统计产量。 B. 轮胎输出报表 1 所有输入数据生成唯一胎号。 C. 按生产的胎号范围输出此范围内报表 2 所有数据以及工作实时生成的温度与压力曲线。 D.