计算机图形学 实验二要点

  • 格式:doc
  • 大小:731.50 KB
  • 文档页数:27

下载文档原格式

  / 27
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学系实验报告

课程名

称计算机图形学班

级12网络2

实验名称VC存取BMP图像及其几何变

教导教

师吴志攀

姓名李文森学号1214080613213 日

期2014 .11.21

一、实验目的

1. 掌握VC中BMP图像的存取方法;

2. 掌握BMP图像平移、旋转、变比等几何变换。

二、实验设备与环境

TC2.0,Windows XP

三、实验内容、程序清单及运行结果

1.打开VC++ 6.0,选择File|New进入界面。在Projects中选择MFC AppWinzard(exe),在Project name中输入项目名称,本例为ReadBMP,在Location中输入项目要保存的文件夹。点击“OK”进入下一步。如下图2-1所示。

图2-1

2.选择文档类型。在本例中使用的是单文档视图结构,所以这里选择Single

document。其余部分设置使用VC++ 6.0的默认设置,点击“Finish”完成项目创建。如下图2-2所示:

图2-2

3.为了将BMP中的数据读入到内存中,在项目中导入专门处理BMP文件头和数据的文件:DIBAPI.H和DIBAPI.CPP,在其中实现对BMP文件的大部分处理。

在工作区“FileView”选项卡的“Header Files”中点右键,在“添加文件到目录”添加“DIBAPI.H”文件。如下图2-3所示:

图2-3

在工作区“FileView”选项卡的“Source Files”中点右键,在“添加文件到目录”添加“DIBAPI.CPP”文件。

并在“ReadBMPDoc.h”添加头文件"dibapi.h",如下所示:

#include "dibapi.h"

4.在CReadBMPDoc类中添加保护成员变量CPalette* m_palDIB,HDIB m_hDIB和CSize m_sizeDoc。m_hDIB用于保存当前BMP图像句柄,m_palDIB用于指向BMP图像对应的调色板。

protected:

HDIB m_hDIB;

CPalette* m_palDIB;

CSize m_sizeDoc;

5.为了取得保存在当前文档中的HDIB和Palette数据,在“ReadBMPDoc.h”的CReadBMPDoc类中添加方法:GetHDIB,GetDocPalette和GDocSize。如下所示:// Attributes

public:

HDIB GetHDIB() const

{ return m_hDIB; }

CPalette* GetDocPalette() const

{ return m_palDIB; }

CSize GetDocSize() const

{ return m_sizeDoc; }

在CReadBMPDoc.cpp的构造函数中初始化:

// 初始化变量

m_hDIB = NULL;

m_palDIB = NULL;

m_sizeDoc = CSize(1,1);

6.响应类CReadBMPDoc OnOpenDocument事件,以实现打开文件的操作。

从View|ClassWizard进入MFC ClassWizard界面,在Message Maps选项中完成消息映射。下图2-4所示:

图2-4

在BOOL CReadBMPDoc::OnOpenDocument(LPCTSTR lpszPathName)函数中添加如下代码:

//if (!CDocument::OnOpenDocument(lpszPathName))

//return FALSE;

// TODO: Add your specialized creation code here

//return TRUE;

CFile file;

CFileException fe;

// 打开文件

if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, &fe))

{

// 失败

ReportSaveLoadException(lpszPathName, &fe,

FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);

// 返回FALSE

return FALSE;

}

DeleteContents();

// 更改光标形状

BeginWaitCursor();

// 尝试调用ReadDIBFile()读取图像

TRY

{

m_hDIB = ::ReadDIBFile(file);

}

CA TCH (CFileException, eLoad)

{

// 读取失败

file.Abort();

// 恢复光标形状

EndWaitCursor();

// 报告失败

ReportSaveLoadException(lpszPathName, eLoad,

FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);

// 设置DIB为空

m_hDIB = NULL;

// 返回FALSE

return FALSE;

}

END_CATCH

// 初始化DIB

InitDIBData();

// 恢复光标形状

EndWaitCursor();

// 判断读取文件是否成功

if (m_hDIB == NULL)

{

// 失败,可能非BMP格式

CString strMsg;

strMsg = "读取图像时出错!可能是不支持该类型的图像文件!";

// 提示出错