- 1、本文档共53页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
昆明理工大学
数字图像处理实验综合报告
学 号:
姓 名:
指导教师: 桂 进 斌
实验一、bmp位图的读取与显示读取图像数据并显示。BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
2、bmp图像组成:
(1)位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;
2)位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;
3)调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;4)位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。读取图像数据并显示。1)生成一名为dip(学生使用自己的名字)的基于MFC的应用程序框架:选择file菜单new选项,在打开的窗口中选择project选项,选中MFC。并在project name输入dip ,选择存放project的位置;
(2)在应用程序中加入具体的函数和变量:
a、在CdipView.h中加入如入变量:
public:
int m_x;
HBITMAP m_Bmp;
LPVOID m_ColorList;
LPBYTE m_Image;
LPBITMAPINFOHEADER m_DibHead;
enum allocate {None, crtallocate, heapallocate};
allocate m_nBmpallocate;
allocate m_nImageallocate;
DWORD m_ImageSize;
int m_nPalette;
HANDLE m_hFile;
HANDLE m_hMap;
LPVOID m_lpvFile;
HPALETTE m_hPalette;
HGLOBAL m_hGlob;
利用ClassWizard向CdipView类中加入如下成员函数。
void zftjh(unsigned char *lpDib,long lWidth,long lHeight);
void SetPaletteSize(int nBitCount);
void Clear();
BOOL ReadFile(CFile *pFile);
BOOL SetPalette();
BOOL GetPalette();
BOOL DibToDC(CDC* pDC,CSize size);
BOOL MemToDib(LPVOID lmem);
CSize GetDibSize();
b、利用资源编辑器,在主菜单中添加消息响应函数OnFileOpen(),具体方法为打开管理窗口,在资源栏中展开资源文件,选择menu并打开,双击“IDR_MAINFRAME”,选择“文件”菜单下“打开”子菜单,右击在快捷菜单中选择“添加事件处理程序”,选择“CDipView类”,添加消息响应函数,单击“编辑”,并加入如下代码:
CFileDialog filedlg(TRUE,bmp,*.bmp);
if(filedlg.DoModal()!=IDOK)
return;
CFile myfile;
myfile.Open(filedlg.GetPathName(),CFile::modeRead);
if(ReadFile(myfile)==TRUE)
Invalidate();
SetPalette();
c、修改OnDraw()函数,添加如下代码:
BeginWaitCursor();
CSize DibSize = GetDibSize();
DibSize.cx *= m_x;
DibSize.cy *= -m_x;
DibToDC(pDC, DibSize);
EndWaitCursor();
在CDipView类的构造函数中加入:m_Image=NULL;
m_DibHead=NULL;
e、在初始化函数OnInitialUpdate()中加入如下代码替换原来的代码:
? m_x=25;
? CSize MaxSize(24000,3200
文档评论(0)