代码下载路径:http://download.csdn.net/detail/dafenqie/9690529
1、通过LoadImage函数静态显示一个bmp文件:
1)增加一个pictureControl控件,修改ID为:IDC_STATIC_PICTURE
2)增加一个按钮,caption改为“静态显示图片”
3)双击按钮,生成按钮的点击响应函数,在函数中增加如下代码,其中文件名中根据实际情况填写文件路径。
void CtestPictureDlg::OnBnClickedButton2()
{
//获取对话框上图片控件的句柄
CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC_PICTURE);
//设置静态控件窗口风格为位图居中显示
pWnd->ModifyStyle(0xf,SS_BITMAP|SS_CENTERIMAGE);
//显示图片
pWnd->SetBitmap((HBITMAP)::LoadImage(NULL,
_T("D:\\HELLO.BMP"), //资源号或本地文件名
IMAGE_BITMAP, //装载位图 IMAGE_CURSOR光标 IMAGE_ICON图标
0, //宽度 0为默认大小
0, //高度 像素为单位
LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE));
}
2、动态显示bmp文件,支持手工选择文件显示。
1)增加一个pictureControl控件,修改ID为:IDC_PICTURE
2)增加一个按钮,caption改为“动态显示图片”
3)双击按钮,生成按钮的点击响应函数,在函数中增加如下代码。
void CtestPictureDlg::OnBnClickedButton1()
{
//打开文件 定义四种格式的文件bmp gif jpg tiff
CString filter;
filter="所有文件(*.bmp,*.jpg,*.gif,*tiff)|*.bmp;*.jpg;*.gif;*.tiff| BMP(*.bmp)|*.bmp| JPG(*.jpg)|*.jpg| GIF(*.gif)|*.gif| TIFF(*.tiff)|*.tiff||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter,NULL);
//按下确定按钮 dlg.DoModal() 函数显示对话框
if( dlg.DoModal() == IDOK )
{
//打开对话框获取图像信息
CString BmpName = dlg.GetPathName(); //获取文件路径名 如D:\pic\abc.bmp
CString EntName = dlg.GetFileExt(); //获取文件扩展名
EntName.MakeLower(); //将文件扩展名转换为一个小写字符
if(EntName.Compare(_T("bmp")) == 0)
{
//定义变量存储图片信息
BITMAPINFO *pBmpInfo; //记录图像细节
BYTE *pBmpData; //图像数据
BITMAPFILEHEADER bmpHeader; //文件头
BITMAPINFOHEADER bmpInfo; //信息头
CFile bmpFile; //记录打开文件
//以只读的方式打开文件 读取bmp图片各部分 bmp文件头 信息 数据
if(!bmpFile.Open(BmpName, CFile::modeRead|CFile::typeBinary))
return;
if (bmpFile.Read(&bmpHeader,sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER))
return;
if (bmpFile.Read(&bmpInfo,sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER))
return;
pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)];
//为图像数据申请空间
memcpy(pBmpInfo,&bmpInfo,sizeof(BITMAPINFOHEADER));
DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits;
pBmpData = (BYTE*)new char[dataBytes];
bmpFile.Read(pBmpData,dataBytes);
bmpFile.Close();
//显示图像
CWnd *pWnd=GetDlgItem(IDC_PICTURE); //获得pictrue控件窗口的句柄
CRect rect;
pWnd->GetClientRect(&rect); //获得pictrue控件所在的矩形区域
CDC *pDC=pWnd->GetDC(); //获得pictrue控件的DC
pDC->SetStretchBltMode(COLORONCOLOR);
StretchDIBits(pDC->GetSafeHdc(),0,0,rect.Width(),rect.Height(),0,0,
bmpInfo.biWidth,bmpInfo.biHeight,pBmpData,pBmpInfo,DIB_RGB_COLORS,SRCCOPY);
delete pBmpInfo;
delete pBmpData;
}
}
}
3、编译运行文件,点击“静态显示图片”和动态显示图片“选择“D:\\HELLO.BMP"文件,运行结果如图: