VC MFC界面上显示BMP图片
2013-03-08 22:51
459 查看
1、通过点击界面浏览按钮选择BMP图像文件。
点击浏览按钮打开文件对话框选择BMP图像文件,得到文件所在的路径目录。关键代码如下:
2、加载BMP文件到内存
通过得到的BMP图像文件路径目录,加载BMP图像文件到内存中。关键代码如下:
3、将内存中的BMP文件内容转换到HBITMAP
将内存中的BMP文件内容转换成位图句柄。关键代码如下:
4、在屏幕上显示BMP图像
双缓冲实现BMP位图显示在屏幕上。关键代码如下:
这个方法是我们经常用的用来在界面上画图的一种方法。
本文出自 “钟斌的博客” 博客,请务必保留此出处http://binge518.blog.51cto.com/1554719/1150458
点击浏览按钮打开文件对话框选择BMP图像文件,得到文件所在的路径目录。关键代码如下:
void ShowBMPDlg::OnButtonSelectiamge() { char szFilter[] = "BMP Files (*.bmp)|*.bmp|All Files(*.*)|*.*||"; CFileDialog dlg( TRUE,"BMP",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter ); if(dlg.DoModal() == IDOK) { strPathName = dlg.GetPathName(); LoadShowBMPFile(strPathName); m_hBitmap = BufferToHBITMAP(); Invalidate(); } }
2、加载BMP文件到内存
通过得到的BMP图像文件路径目录,加载BMP图像文件到内存中。关键代码如下:
BOOL ShowBMPDlg::LoadShowBMPFile(const char *pPathname) { CFile file; if( !file.Open( pPathname, CFile::modeRead) ) return FALSE; DWORD m_nFileLen; m_nFileLen = file.GetLength(); m_pBMPBuffer = new char[m_nFileLen + 1]; if(!m_pBMPBuffer) return FALSE; if(file.Read(m_pBMPBuffer,m_nFileLen) != m_nFileLen) return FALSE; return TRUE; }
3、将内存中的BMP文件内容转换到HBITMAP
将内存中的BMP文件内容转换成位图句柄。关键代码如下:
HBITMAP ShowBMPDlg::BufferToHBITMAP() { HBITMAP hShowBMP; LPSTR hDIB,lpBuffer = m_pBMPBuffer; LPVOID lpDIBBits; BITMAPFILEHEADER bmfHeader; DWORD bmfHeaderLen; bmfHeaderLen = sizeof(bmfHeader); strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen); if (bmfHeader.bfType != (*(WORD*)"BM")) return NULL; hDIB = lpBuffer + bmfHeaderLen; BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ; BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ; m_bmW = bmiHeader.biWidth; m_bmH = bmiHeader.biHeight; lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER *)lpBuffer)->bfOffBits; CClientDC dc(this); hShowBMP = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits, &bmInfo,DIB_RGB_COLORS); return hShowBMP; }
4、在屏幕上显示BMP图像
双缓冲实现BMP位图显示在屏幕上。关键代码如下:
void ShowBMPDlg::DrawImage(int x, int y, CDC *pDC) { HBITMAP OldBitmap; CDC MemDC; MemDC.CreateCompatibleDC(pDC); OldBitmap=(HBITMAP)MemDC.SelectObject(m_hBitmap); CBitmap* pBitmap = CBitmap::FromHandle(m_hBitmap); if(m_bmW == 0 || m_bmH == 0) return ; CRect rect; GetClientRect(&rect); pDC->BitBlt(x,y,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY); MemDC.SelectObject(OldBitmap); }
这个方法是我们经常用的用来在界面上画图的一种方法。
本文出自 “钟斌的博客” 博客,请务必保留此出处http://binge518.blog.51cto.com/1554719/1150458
相关文章推荐
- VC MFC界面上显示BMP图片
- VC界面显示图片(BMP)
- VC界面显示图片(BMP)
- MFC界面上显示BMP图片
- VC界面显示图片(BMP)
- VC将BMP图片显示在屏幕上(用图片作背景)
- MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
- MFC对话框中显示BMP,JPG图片
- 如何在MFC窗口显示BMP和JPG图片
- vc 界面显示bmp
- vc/mfc获取rgb图像数据后动态显示及保存图片的方法
- VC将BMP图片显示在屏幕上(用图片作背景)
- [转帖-本人未验证]VC SDK 显示jpg jpeg bmp等图片 LoadImage 涉及到Image类
- MFC CListCtrl 显示bmp图片
- MFC 软件登陆界面的实现(可以用来做启动画面,添加bmp图片,然后给图片加点击响应事件。)
- vc 界面显示图片(JPG,jpeg .gif)
- vc++ mfc 里保存缩放的bmp图片 不失真
- (二)VC界面显示图片(JPG JPEG GIF)
- VC++图片控件(Picture Control)显示资源位图(BMP)、文件位图(BMP)、其它格式文件图片(JPG\PNG\BMP)的方法
- MFC 基于对话框的图片控件(picture)动态加载.bmp图片并显示