具体的使用方法,在以下部分进行介绍。
1.3 总体设计
1.3.1 项目规划
图像处理系统是一个典型的图像处理软件,它由图像显示、图像转换、图像处理、字符识别、其他和帮助等模块组成。
? 图像显示模块
该模块主要包括显示位图、显示JPEG、显示GIF 3个部分。 ? 图像转换模式
该模块主要包括位图转换为JPEG、JPEG转换为位图、位图转换为GIF、GIF转换为位图4个部分。
? 图像处理模块
该模块主要包括图像旋转、图像锐化处理、图像反色处理、灰度化处理、线性变换5个部分。
? 字符识别模块
该模块主要包括手写数字识别。 ? 其他模块
该模块主要包括设置菜单的固定颜色和随机颜色两个部分。 ? 帮助模块
该模块主要包括软件的版本、开发单位等信息。 1.3.2 系统功能架构图
系统功能构架图如图1.1所示
图1.1 图像处理系统功能架构图
1.4 系统设计
1.4.1 设计目标
本系统属于小型的图像处理软件,主要用于实现图像的显示与批量转换操作。具体设计要求如下。
? 实现各种图像格式的显示。
? 系统采用良好的人机对话模式,界面设计美观、友好。 ? 支持图像的单一转换与批量转换。
? 实现位图的各种常规操作。例如图像旋转、灰度化处理、线性变
换等。
? 系统运行稳定、安全可靠。 1.4.2 开发及运行环境
系统开发平台:Visual C++ 6.0 。
运行平台:Windows XPWindows 2000Windows 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); 选中位图 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.leftm_Rect.Height(),
Pdc,m_Rect.left,m_Rect.top,SRCCOPPY);
SelectObject(m_poldbmp); 选中之前选中的对象 If(m_pbmp!=NULL) 判断位图对象是否为空
,
m_Rect.top
,
m_Rect.Width()
,
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动态链接库中导出该函数。流程图如下:
1.5.4 自定义菜单
为了使程序界面更加美观,在本系统中自定义了一个菜单,实现菜单的特殊效果显示,如图1.3所示:
图1.3 自定义菜单
在Visual C++中,实现自定义菜单是比较容易的,MFC类库提供了CMenu
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库(强烈推荐)毕业论文设计_基于VC++的图像处理系统设计与实现(3)在线全文阅读。
相关推荐: