本文主要向大家介绍了VC编程之VC MFC界面上显示BMP图片,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。
1、通过点击界面浏览按钮选择BMP图像文件。
点击浏览按钮打开文件对话框选择BMP图像文件,得到文件所在的路径目录。关键代码如下:
voidShowBMPDlg::OnButtonSelectiamge(){charszFilter[]="BMPFiles(*.bmp)|*.bmp|AllFiles(*.*)|*.*||";CFileDialogdlg(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图像文件到内存中。关键代码如下:
BOOLShowBMPDlg::LoadShowBMPFile(constchar*pPathname){CFilefile;if(!file.Open(pPathname,CFile::modeRead))returnFALSE;DWORDm_nFileLen;m_nFileLen=file.GetLength();m_pBMPBuffer=newchar[m_nFileLen+1];if(!m_pBMPBuffer)returnFALSE;if(file.Read(m_pBMPBuffer,m_nFileLen)!=m_nFileLen)returnFALSE;returnTRUE;}
3、将内存中的BMP文件内容转换到HBITMAP将内存中的BMP文件内容转换成位图句柄。关键代码如下:
HBITMAPShowBMPDlg::BufferToHBITMAP(){HBITMAPhShowBMP;LPSTRhDIB,lpBuffer=m_pBMPBuffer;LPVOIDlpDIBBits;BITMAPFILEHEADERbmfHeader;DWORDbmfHeaderLen;bmfHeaderLen=sizeof(bmfHeader);strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);if(bmfHeader.bfType!=(*(WORD*)"BM"))returnNULL;hDIB=lpBuffer+bmfHeaderLen;BITMAPINFOHEADER&bmiHeader=*(LPBITMAPINFOHEADER)hDIB;BITMAPINFO&bmInfo=*(LPBITMAPINFO)hDIB;m_bmW=bmiHeader.biWidth;m_bmH=bmiHeader.biHeight;lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER*)lpBuffer)->bfOffBits;CClientDCdc(this);hShowBMP=CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);returnhShowBMP;}
4、在屏幕上显示BMP图像双缓冲实现BMP位图显示在屏幕上。关键代码如下:
voidShowBMPDlg::DrawImage(intx,inty,CDC*pDC){HBITMAPOldBitmap;CDCMemDC;MemDC.CreateCompatibleDC(pDC);OldBitmap=(HBITMAP)MemDC.SelectObject(m_hBitmap);CBitmap*pBitmap=CBitmap::FromHandle(m_hBitmap);if(m_bmW==0||m_bmH==0)return;CRectrect;GetClientRect(&rect);pDC->BitBlt(x,y,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);MemDC.SelectObject(OldBitmap);}
这个方法是我们经常用的用来在界面上画图的一种方法。
以上就介绍了VC/MFC的学习,希望对VC/MFC有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言VC/MFC频道!
如果觉得《C语言用句柄显示bmp图片 VC编程之VC MFC界面上显示BMP图片》对你有帮助,请点赞、收藏,并留下你的观点哦!