您的位置:首页 > 其它

MFC实现静态和动态显示bmp图片

2016-11-23 09:54 477 查看
代码下载路径: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"文件,运行结果如图:

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息