- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二编写图像读写程序
实 验 二
【实验名称】
编写图像读/写程序
【实验内容】
用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;
文档评论(0)