1、添加一个Picture 控件
属性 -->类型-->位图
为了对控件有区别,要把Picture的ID改下,我这里改为ID_PICTURE
2、添加Picture的控制变量
右键 -->建立类向导-->Member Variables
选中IDC_PICTURE,单击Add Variable...,确定
3、添加一个HBITMAP变量
HBITMAP m_bitmap;
m_bitmap = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1)); //导入位图
m_picture.SetBitmap(m_bitmap);//显示m_bitmap
这种方法太不灵活了,你也可以自己加载自己喜欢的图片!
CString m_strfile; /***你在文件选择对话框中选中的文件名***/
CRect r;
GetClientRect(&r);
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"Bmp files(*.bmp)|*.bmp|",NULL);
if(dlg.DoModal ())
{
m_strfile=dlg.GetPathName ();
}
m_bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
m_strfile,
IMAGE_BITMAP,
r.Width()/2, // 原图的1/2
r.Height()/2, //原图的1/2
LR_LOADFROMFILE);
m_picture.SetBitmap(m_bitmap);
为了提高程序的灵活性,我想让他不仅加载bmp图片,我还想让他加载jpeg,png等图片,并且按照一定的比例缩放,下面使用CImage类进行处理
要把在头文件上加上
#include "atlimage.h"
CRect rect; m_picture.GetClientRect(&rect); //获取Picture Control的属性 CDC *pDC = m_picture.GetDC(); CImage image; image.Load(m_strfile);//加载图片 CImage t_image; t_image.Create(rect.Width(),rect.Height(),32);//创建缩放后图片的存储区 /* 求缩放比例 */ float width = rect.Width()/(float)image.GetWidth() , height = rect.Height()/(float)image.GetHeight(); float result = width < height ? width : height; if (m_bitmap) DeleteObject(m_bitmap);//清除Picture Control 缓存 image.Draw(t_image.GetDC(),0,0, image.GetWidth()*result, image.GetHeight()*result); //按照Picture控件的大小,(不按比例)缩放原始图片 t_image.ReleaseDC(); m_bitmap = t_image.Detach(); HBITMAP OldBitmap = m_picture.SetBitmap(m_bitmap); if (OldBitmap) DeleteObject(OldBitmap);