MFC实现打开BMP JPG或GIF图片
来源:互联网 发布:verycloud云端网络 编辑:程序博客网 时间:2024/04/28 23:27
1、新建一个单文档的应用程序,项目名称为MFC
2、为CMFCView类添加下述成员变量和成员函数:其中CImage m_MyImage需要头文件"atlimage.h"的支持,或者你可以用向导来加这个变量,那么头文件会自动添加的,我们这里手动在CShowBitmapView.h中加入#include "atlimage.h",一定要记得加这个。
注意:此头文件包含的顺序要在自己定义头文件前,否则运行报错!
//参数定义
public:
CString strPicPath; //打开的图片文件文件名
CString extname; //打开的图片文件的扩展名
CBitmap m_bitmap; //创建位图对象
CImage m_MyImage; //用于读取与显示jpg等格式的图像文件
void ShowBitmap(CDC* pDC,CString strPicPath); //用来显示指定位图的函数
void ShowPic(CDC* pDC,CString picName); //用于显示jpg等格式的图像的函数
3、为ID_FILE_OPEN消息添加响应函数
void CMFCView::OnFileOpen()
{
//CFileDialog dlg(TRUE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("位图文件(*.BMP;*.jpg)|*.BMP;*.jpg|"));
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("图片文件(*.jpg;*.jpeg;*.gif;*.bmp)|*.jpg;*.jpeg;*.gif;*.bmp|位图文件(*.BMP)|*.BMP||"));
if (IDOK==dlg.DoModal())
{
strPicPath.Format(_T("%s"),dlg.GetPathName());
extname = dlg.GetFileExt(); //返回选定文件的扩展文件名
extname.MakeLower(); //将后缀名变成小写的
Invalidate();
}
}
4、编写BMP图片显示函数
void CMFCView::ShowBitmap(CDC* pDC,CString strPicPath)
{
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,strPicPath,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
m_bitmap.Detach();
m_bitmap.Attach(hBitmap);
CRect rect;
GetClientRect(&rect);
CDC dcImage;
if (!dcImage.CreateCompatibleDC(pDC))
{
return;
}
BITMAP bm;
m_bitmap.GetBitmap(&bm);
dcImage.SelectObject(&m_bitmap);
//pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY); //图片保留原始大小
pDC->StretchBlt(0,0,rect.right,rect.bottom,&dcImage,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); //图片拉伸显示,填满整个客户区
}
5、编写JPG等图片显示函数
void CMFCView::ShowPic(CDC* pDC,CString strPicPath)
{
if(!m_MyImage.IsNull())
m_MyImage.Destroy();
HRESULT hResult=m_MyImage.Load(strPicPath);
int iWidth=m_MyImage.GetWidth();
int iHeight=m_MyImage.GetHeight();
m_MyImage.Draw(pDC->m_hDC,0,0,iWidth,iHeight);
}
6、修改OnDraw函数,实现图片的显示。
void CMFCView::OnDraw(CDC* pDC)
{
CMFCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
if (0 == extname.Compare(_T("bmp")))
{
ShowBitmap(pDC,strPicPath);
}
else
{
if (0 == extname.Compare(_T("jpg"))||0 == extname.Compare(_T("jpeg"))||0 == extname.Compare(_T("gif")))
{
ShowPic(pDC,strPicPath);
}
}
}
7、补充:
程序中有点小问题就是,当图片拉伸显示的时候可能会出现失真的情况,一般是BMP格式的图片缩小、JPG文件拉伸时会失真,这时候在使用StretchBlt函数或者Draw函数前需要调用SetStretchBltMode函数,对于上面程序的修改方法是:
1)在ShowBitmap(CDC* pDC,CString strPicPath)函数中
pDC->StretchBlt(0,0,rect.right,rect.bottom,&dcImage,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);前面加入
pDC->SetStretchBltMode(STRETCH_HALFTONE);
2)在ShowPic(CDC* pDC,CString strPicPath)函数中
m_MyImage.Draw(pDC->m_hDC,0,0,rect.right,rect.bottom,0,0,iWidth,iHeight);前面加入
::SetStretchBltMode(pDC->m_hDC,HALFTONE);或者
pDC->SetStretchBltMode(STRETCH_HALFTONE);
这里的Draw跟上面的有点不一样,这个实现了图片填满整个View,即全屏显示。
- MFC实现打开BMP JPG或GIF图片
- VC实现打开BMP JPG或GIF图片(二)|VC/MFC/打开图片
- VC实现打开BMP JPG或GIF图片
- java 将jpg、bmp、png、gif图片文件,进行等比或非等比的大小转换
- java将图片缩放实现类(能将jpg、bmp、png、gif图片文件,进行等比或非等比的大小转换)
- 缩略图实现,将图片(jpg、bmp、png、gif等等)真实的变成想要的大小
- MFC对话框中显示BMP,JPG图片
- 使用系统imgdecmp库解码JPG,GIF,PNG,BMP图片
- 图片中,bmp . png . jpg . gif ……含义
- 使用系统imgdecmp库解码JPG,GIF,PNG,BMP图片
- VC 显示jpg,gif,bmp等格式图片
- gif、bmp、jpg、jpeg图片有什么区别
- JPG,PNG,GIF,WBMP,BMP
- 如何在MFC窗口显示BMP和JPG图片
- 如何在MFC窗口显示BMP和JPG图片
- 如何在MFC窗口显示BMP和JPG图片
- MFC jpg与bmp格式图片互转
- 网页图片如何选择使用GIF格式或JPG格式
- 阿里巴巴笔试题-马尔科夫(HMM)的特征
- RTSP协议报文以及控制流媒体控制流程解析
- 备忘录
- Erlang Learning Notes
- RTP/RTCP/RTSP协议
- MFC实现打开BMP JPG或GIF图片
- JavaScript入门教程
- 几种 计算机语言的评价
- Web世界中,Struts2身处何方
- 托管注入深入研究
- 为自己呐喊~!
- Alert弹出窗口 美化
- Xenocode Postbuild 2009 加壳破
- 续:建立WCF服务