- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC++图像处理集中实习指导书.doc
数字图像处理集中实习指导书
本文基于VC++6.0开发环境,介绍数字图像处理的基本操作和处理。
一、工程的建立
1、运行Microsoft Visual C++程序,进入VC++主界面。
2、单击“File”菜单,选择“New”来新建,在出现的对话框中选择Project,并选择“MFC AppWizard[exe]”,表示建立一个MFC应用向导支持的工程文件。然后在右边输入工程名称(本文为“B”为例)和该工程存储地址,工程名要求为4位数字,如某同学是3班,学号为4,则工程命名为“0304”,输入完毕后单击“OK”。
3、下面的六个步骤中,前五个选择默认,第六个步骤中,将视图类的基类更改为CSrollView类,然后点击完成。
通过这些步骤就可以建立一个Windows风格的工程,这个工程也是今后进行VC图像处理的基础。点击编译、连接,没有错误和警告,然后运行,会出现一个应用程序界面,界面具有文件、编辑、查看、窗口和帮助这些菜单,点击其子菜单,发现程序什么也没执行,这需要我们为它加入相关的功能。
二、加载位图类
1、将已经写好的位图类文件Dib.h和Dib.cpp拷贝到工程文件夹的根目录下,点击主菜单Project,选择Add to Project下的Files,然后选择位图类的头文件和cpp文件,这时,该视图类就加到工程中了,在左边项目工作区的ClassView中就可以看到该类的列表。展开每个类,可看到每个类的变量和函数。
2、编译、连接无错误后,可以运行。
三、读写位图
1、在视图类的cpp文件中包含dib.h头文件,并生成一个CDib对象:CDib dib;
2、在视图类头文件的构造函数中加入3个成员变量如下:
BYTE *m_pBitmap;
DWORD m_dwHeight, m_dwWidth;
WORD m_flag;
分别表示数据指针、图像的高度、图像的宽度和图像的类型。
在析构函数中加入if(m_pBitmap) delete m_pBitmap;
3、添加“打开”消息响应函数。可用“Ctrl+W”打开类向导对话框,选择视图类中的打开文件ID号,选择COMMAND命令类型,点击“Add Function”按钮,选择默认的函数名,进入该函数,键入如下代码行,进行读图像:
CString strFileName;
static char szFilter[]=BMP文件(*.bmp)|*.bmp||;
CFileDialog dlg(TRUE, bmp, NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
if(dlg.DoModal()!=IDOK) return;
strFileName=dlg.GetPathName();
(this-GetDocument())-SetTitle(strFileName);
if(!dib.LoadBmpFile(strFileName,m_pBitmap,m_dwHeight,m_dwWidth,m_flag))
return;
Invalidate(true);
4、在视图类的OnDraw函数中加如下代码显示图像:
RECT rectDoc;
GetClientRect(rectDoc);
CSize pageSize(rectDoc.right, rectDoc.bottom);
CSize lineSize(100,1);
CSize docSize(0,0);
RECT rect;
GetClientRect(rect);
BYTE *pImageDisp = NULL;
BITMAPINFO *pBmpInfo = NULL;
//设置在指定设备内容中(显卡内存)的拉伸模式
pDC-SetStretchBltMode(COLORONCOLOR);
if(m_pBitmap)
{
dib.TransToBmp(m_dwHeight, m_dwWidth, m_pBitmap, pImageDisp, m_flag);
dib.CreateBITMAPINFO(pBmpInfo, m_dwHeight, m_dwWidth, m_flag);
//拷贝内存数据到显示器
StretchDIBits(pDC-GetSafeHdc(),
rect.left, rect.top,
m_dwWidth, m_dwHeight,
0,0,
m_dwWidth, m_dwHeight,
pImageDisp,
pBmpInfo,
DIB_RGB_COLORS,
SRCCOPY);
文档评论(0)