MFC打开和保存一幅bmp图片---编程流程.doc_第1页
MFC打开和保存一幅bmp图片---编程流程.doc_第2页
MFC打开和保存一幅bmp图片---编程流程.doc_第3页
MFC打开和保存一幅bmp图片---编程流程.doc_第4页
MFC打开和保存一幅bmp图片---编程流程.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

打开一幅图片1. 新建一个多文档的MFC应用程序.2. 在_Doc.h文件的C_Doc类中增加如下成员变量;public:int numquad; /调色板数int flagOpen; /标志是否打开bmpBITMAPINFO* pbi; /记录图像细节BYTE* lpbuf; /图像数据RGBQUAD* quad; /调色板BITMAPFILEHEADER bf;/文件头 BITMAPINFOHEADER bi; /信息头3. 修改”打开”菜单项的响应函数;a. 找到菜单资源b. 在”打开”菜单项建立类向导,页面设置如下:选择“Add function”,然后单击“Edit Code”编辑代码如下:void CZhbDoc:OnFileOpen() / TODO: Add your command handler code hereLPCTSTR lpszFilter=BMP Files(*.bmp)|*.bmp|任何文件|*.*|;CFileDialog dlg(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,lpszFilter,NULL);CString filepath;CFile file;/打开文件对话框if(dlg.DoModal()=IDOK)filepath=dlg.GetPathName();if(file.Open(filepath,CFile:modeRead|CFile:shareDenyNone,NULL)=0)/读取文件失败AfxMessageBox(无法打开文件!,MB_OK,0);return;/读取文件头file.Read(&bf,sizeof(bf);/判断是否是BMP文件if(bf.bfType!=0x4d42)/BMAfxMessageBox(非BMP文件!,MB_OK,0);return;/判断文件是否损坏if(file.GetLength()!=bf.bfSize)AfxMessageBox(文件已损坏,请检查!,MB_OK,0);return;/读文件信息头file.Read(&bi,sizeof(bi);/计算调色板数目numquad=0;if(bi.biBitCount24)numquad=1flagOpen=1) /这个函数显示DIBSetDIBitsToDevice(dc.m_hDC, /DIB将输出的设备描述表 0, /设备描述表中位图输出起始逻辑x地址 0, /设备描述表中位图输出起始逻辑x地址 pDoc-bi.biWidth, /DIB的宽度 pDoc-bi.biHeight, /DIB的高度 0, /DIB开始读取输出的像素数据的x位置 0, /DIB开始读取输出的像素数据的y位置 0, /DIB中像素的水平行号,它对应lpBits内存缓冲区第一行数据 pDoc-bi.biHeight, /DIB的行数,对应包含在由lpBits所指内存缓冲区中的数据 pDoc-lpbuf, /包含像素数据的内存缓冲区的指针 pDoc-pbi, /指向初始化了的BITMAPINFO数据结构的指针,描述了位图的大小和色彩数据 DIB_RGB_COLORS); /指定是显示的颜色 Invalidate(FALSE);/ Do not call CView:OnPaint() for painting messages保存一幅图片1.修改”另存为”菜单项的响应函数;a找到菜单资源b在”另存为”菜单项建立类向导,页面设置如下:选择“Add function”,然后单击“Edit Code”代码如下:void CZhbDoc:OnFileSaveAs() LPCTSTR lpszFilter=BMP Files(*.bmp)|*.bmp|任何文件|*.*|;CFileDialog dlg(FALSE,lpszFilter,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,lpszFilter,NULL);if (dlg.DoModal()!=IDOK)return;CFile file;CFileException fe;if (!file.Open(dlg.GetPathName(), CFile:modeCreate | CFile:modeReadWrite | CFile:shareExclusive, &fe) / 失败 ReportSaveLoadException(dlg.GetPathName(), &fe, TRUE, AFX_IDP_INVALID_FILENAME); return; file.SeekToBegin();file.Write(&bf,sizeof(bf);file.Write(&bi,sizeof(bi)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论