欢迎来到天天文库
浏览记录
ID:29640020
大小:456.00 KB
页数:7页
时间:2018-12-21
《mfc对话框打开一幅图片并在picture显示和图片保存》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、学了MFC一段时间后,试着要用对话框打开一幅bmp图像并保存,结果发现网上这些资料太少了,而且有的也讲不清,讲不全,所以自己磕磕碰碰捣鼓了好久,期间也谢谢各位大神的指导,现在我终于完成,特意写出来与大家分享,各位菜鸟共勉。一、首先要先了解bmp位图结构http://wenku.baidu.com/view/d06c23543c1ec5da50e2706d.html可以去看看,内容不多但是够看,也容易懂二、了解位图的显示函数SetStretchBltMode()StretchDIBits()具体函数介绍自己百度一下,我就不多说了三、开始做啦1、新建一个MFC对话框文档默
2、认其他设置,点击完成后会出现这个界面在按钮上单击鼠标右键,在弹出的列表中选择属性把标题改为读取图片再添加一个按钮,把ID改为IDC_SAVE,标题改为保存图片在控件中选择图像,然后在对话框画一个大小适宜的矩形框,在选中对话框点击右键,选择属性,把ID改为IDC_PICTURE回到对话框界面,双击读取图片按钮,这时会弹出一个对话框,点确定然后就会跳到关联函数这边了先把CDialog::OnOK();注释起来,这个是点击按钮后对话框就会关闭的函数然后在//CDialog::OnOK();下面添加以下代码代码都有注释,不懂的地方可以自己再百度//CFileDialog为VC
3、中打开文件对话框类BITMAPFILEHEADERbmpHeader;//文件头BITMAPINFOHEADERbmpInfo;//信息头CFileDialogdlg(TRUE,"*.BMP",NULL,NULL,"位图文件(*.BMP)
4、*.bmp;*.BMP
5、",this);CFilebmpFile;//记录打开文件CStringstrFileName;//记录选择文件路径if(!dlg.DoModal()==IDOK)return;strFileName=dlg.GetPathName();//以只读的方式打开文件if(!bmpFile.Open(strFile
6、Name,CFile::modeRead
7、CFile::typeBinary))return;if(bmpFile.Read(&bmpHeader,sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER)){AfxMessageBox("readbmpheaderfailed!");return;}if(bmpHeader.bfType!=0x4d42){AfxMessageBox("invalidfiletype!");return;}if(bmpFile.Read(&bmpInfo,sizeof(BITMAPINFOH
8、EADER))!=sizeof(BITMAPINFOHEADER)){AfxMessageBox("readbmpinforheaderfailed!");return;}if(bmpInfo.biBitCount!=24){AfxMessageBox("Fileisnot24bit.Applicationdoesn'tsupportthiskindoffile!");return;}pBmpInfo=(BITMAPINFO*)newchar[sizeof(BITMAPINFOHEADER)];if(!pBmpInfo){AfxMessageBox("memoryer
9、ror!");return;}//为图像数据申请空间memcpy(pBmpInfo,&bmpInfo,sizeof(BITMAPINFOHEADER));DWORDdataBytes=bmpHeader.bfSize-bmpHeader.bfOffBits;pBmpData=(BYTE*)newchar[dataBytes];if(!pBmpData){AfxMessageBox("memoryerror!");deletepBmpData;return;}if(bmpFile.Read(pBmpData,dataBytes)!=dataBytes){AfxMessa
10、geBox("Readbmpdatafailed!");deletepBmpInfo;deletepBmpData;return;}bmpFile.Close();CWnd*pWnd=GetDlgItem(IDC_PICTURE);//获得pictrue控件窗口的句柄CRectrect;pWnd->GetClientRect(&rect);//获得pictrue控件所在的矩形区域CDC*pDC=pWnd->GetDC();//获得pictrue控件的DC//显示图片pDC->SetStretchBltMode(COLORONCOLOR);Stretc
此文档下载收益归作者所有