实验二编写图像读写程序探究.doc

实 验 二 【实验名称】 编写图像读/写程序 【实验内容】 用VC++或C#等实现无格式(. RAW)及位图(. BMP)的显示、读文件、另存文件及相互转换格式,界面设计可参考Photoshop的界面。 实验使用的操作系统是Windows XP,使用的软件是Visual C++ 6.0。 思想:打开文件,根据文件后缀名,判断如何显示图像,保存时根据选择做对应的格式转换。主要解决的问题:如何读取位图文件(*.bmp)、如何读取无格式文件(*.raw)、如何将无格式文件(*.raw)转换成位图文件(*.bmp)及如何将图像保存为位图文件(*.bmp)文件。 【实验步骤】 在VC 6.0 MFC下,创建基于单文档的工程Image; 在ImageView类中添加显示、保存图像文件所需的变量如下: BITMAP Bitmap; CString pathname; BYTE Gray; CImageApp *app; int m_nColorUse; // 实际用到的颜色数(也即颜色表数组的大小) LONG m_nDataSize; RGBQUAD* m_pColorTable; // 颜色表 LONG m_nWidth; // 位图宽度 LONG m_nHeight; // 位图高度 int m_flag; // 图像类型标记 BITMAPINFOHEADER m_bmih; // 位图信息头 BITMAPFILEHEADER m_bmfh; // 位图文件头 unsigned char * m_pImage; // 位图数据指针 保存文件(格式转换)及转换后的文件显示: 【结果分析与比较】 本实验成功实现了RAW格式和BMP格式图像文件的显示和格式转换。无格式文件(*.raw),就是指没有文件头信息,所有的字节都是用来表示各像素点的颜色信息,按从左到右、从上到下的顺序排列。位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列。通过格式转换前后文件的对比,明显位图文件比无格式文件占用的空间要大,质量相对比无格式的要好。 通过这次实验,使我对这两种格式的图像文件有了深入认识,并对其存储格式有了更深一步的学习,能够认识到不同格式文件之间的异同,也为以后进行更深一步的图像处理奠定了一定的基础。 【参考文献】 杨淑莹编著,《VC++图像处理程序设计(第二版)》,清华大学出版社,2005 赵辉, 叶子青编著,《Visual C++系统开发实例精粹》,人民邮电出版社,2005 谭明金编著,《Visual C++图形编程技巧与实例》,人民邮电出版社,2002 霍宏涛编著,《数字图像处理》,北京理工大学出版社,2002 马平编著,《数字图像处理和压缩》,电子工业出版社,2007 【附件】 主要功能函数代码如下: void CImageView::OnFileOpen() { CFileDialogdlg(TRUE,NULL,NULL,NULL,BMP(*.BMP)|*.bmp|RAW(*.RAW)| *.raw| |, this); if(dlg.DoModal()==IDOK) { CString str; // 存贮扩展名 str=dlg.GetFileExt(); // 获得文件扩展名 // 如果是RAW格式的图像,则以下打开处理 if((str==RAW)||(str==raw)) { CFile rawfile; rawfile.Open(dlg.GetPathName(),CFile::modeRead); // 打开文件 m_nDataSize=rawfile.GetLength(); // 获取文件长度 m_pImage=new unsigned char[m_nDataSize]; // 分配数据内存 rawfile.ReadHuge(m_pImage,m_nDataSize); // 读取文件 rawfile.Close(); m_nWidth=(LONG)sqrt(m_nDataSize); m_nHeight=m_nWidth; m_flag=1; // R

文档评论(0)

1亿VIP精品文档

相关文档