VC实现打开BMP JPG或GIF图片
来源:互联网 发布:oracle 示例数据库 编辑:程序博客网 时间:2024/04/28 06:58
之前写过一篇文章关于VC中打开图片文件的文章,那个不是很好理解,里面有些地方显得有点乱,这个版本的要容易理解一点,不多说了,我们开始吧。 源文件下载:ShowBitmap.rar
1、新建一个单文档的应用程序,项目名称为ShowBitmap
2、为CShowBitmapView类添加下述成员变量和成员函数:其中CImage m_MyImage需要头文件"atlimage.h"的支持,或者你可以用向导来加这个变量,那么头文件会自动添加的,我们这里手动在CShowBitmapView.h中加入#include "atlimage.h",一定要记得加这个。
//参数定义 void CShowBitmapView::OnFileOpen() 4、编写BMP图片显示函数 5、编写JPG等图片显示函数(此处未列出全屏查看图片的代码,需要这功能的话,请参看Draw函数的相关资料) 6、修改OnDraw函数,实现图片的显示 7、结束语: 感兴趣的朋友,可以把上面两个图片显示函数和OnDraw中的If语句部分合并成一个函数。希望本文能给你们带来点帮助,有什么问题的话也请指正。 8、补充: 程序中有点小问题就是,当图片拉伸显示的时候可能会出现失真的情况,一般是BMP格式的图片缩小、JPG文件拉伸时会失真,这时候在使用StretchBlt函数或者Draw函数前需要调用SetStretchBltMode函数,对于上面程序的修改方法是: 1)在ShowBitmap(CDC* pDC,CString strPicPath)函数中 pDC->SetStretchBltMode(STRETCH_HALFTONE); http://hi.baidu.com/krispan/blog/item/39caa5291f9ee7f898250a23.html
public:
CString strPicPath; //打开的图片文件文件名
CString extname; //打开的图片文件的扩展名
CBitmap m_bitmap; //创建位图对象
CImage m_MyImage; //用于读取与显示jpg等格式的图像文件
void ShowBitmap(CDC* pDC,CString strPicPath); //用来显示指定位图的函数
void ShowPic(CDC* pDC,CString picName);
3、为ID_FILE_OPEN消息添加响应函数(具体怎么加就不细说了),编写该函数(代码如下)
{
//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();
}
}
{
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); //图片拉伸显示,填满整个客户区
}
{
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);
}
{
CShowBitmapDoc* 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);
}
}
}
pDC->StretchBlt(0,0,rect.right,rect.bottom,&dcImage,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);前面加入
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,即全屏显示。
- VC实现打开BMP JPG或GIF图片
- VC实现打开BMP JPG或GIF图片(二)|VC/MFC/打开图片
- MFC实现打开BMP JPG或GIF图片
- VC 显示jpg,gif,bmp等格式图片
- [VC]图片 BMP转JPG
- java 将jpg、bmp、png、gif图片文件,进行等比或非等比的大小转换
- java将图片缩放实现类(能将jpg、bmp、png、gif图片文件,进行等比或非等比的大小转换)
- 缩略图实现,将图片(jpg、bmp、png、gif等等)真实的变成想要的大小
- VC实现打开BMP
- VC 实现BMP转换到JPG、JPG转换到BMP
- VC 中BMP、JPG、GIF图像的显示
- VC下显示JPG,BMP,GIF等图像格式
- VC下显示JPG,BMP,GIF等图像格式(转载)
- VC下显示JPG,BMP,GIF等图像格式
- VC界面显示图片(JPG JPEG GIF)
- VC界面显示图片(JPG JPEG GIF)
- VC 显示jpg和gif图片
- 使用系统imgdecmp库解码JPG,GIF,PNG,BMP图片
- 从当前流行的分布式技术中获益
- Windows 7的自动寻找驱动功能
- 当你学不进去的时候,不妨看看大脑是怎么想的?
- TCP的慢启动详解
- CSS实现菜单圆角背景
- VC实现打开BMP JPG或GIF图片
- 线程的阻塞
- ubuntu grub深入剖析个性设置
- TCHAR、wchar_t、char及字符串处理函数区别(转)
- [WPF] Binding Enum to ComboBox
- W3M基本使用说明
- 解决UpdatePanel 与 jQuery的冲突
- SQL2005 des加密算法存储过程
- c# Winform 如何实现程序只能同时运行一个实例