vc 加載bmp位圖並顯示的方法


方法一、顯示位圖文件

[cpp]  view plain copy
 
  1. HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,_T(“xxx.bmp”),Image_Bitmap,0,0,Lr_CreateDibSection|Lr_DefaultSize|Lr_LoadFromFile);  
  2.   
  3. //加載bmp文件   xxx.bmp 就是要加載的圖片名字  
  4.   
  5. CBitmap bitmap; bitmap.Attach(hBitmap); //關聯位圖對象  
  6.   
  7. CDC dcimage;dcimage.CreateCompatibleDC(pDC); //內存  
  8.   
  9. DCBITMAP bmp;bitmap.GetBitmap(&bmp); //獲取位圖信息  
  10. dcimage.SelectObject(&bitmap); //選取位圖對象  
  11.   
  12. pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&dcimage,0,0,SRCCOPY); //顯示  


 

方法二、用文件打開對話框選取圖片

你建立一個基於對話框的程序,在主對話框上加載一個 PictureBox,然后加載一個Button,添加點擊Button事件。

具體代碼如下:

 

CFileDialog dlg(TRUE,"bmp",".bmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"位圖文件(*.BMP)|*.BMP||");

dlg.DoModal();

HBITMAP hBitmap;

 HDC hSrcDC;

 HDC hDesDC;

 CBitmap bmp;

CWnd *hwnd;

RECT rect;

BITMAP bm;

 hwnd = GetDlgItem(IDC_STATIC);

 hDesDC = hwnd->GetDC()->m_hDC;

hSrcDC = CreateCompatibleDC(hDesDC);

hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),dlg.GetPathName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); GetObject(hBitmap, sizeof BITMAP, &bm);

SelectObject(hSrcDC, hBitmap);

 hwnd->GetClientRect(&rect);

::SetStretchBltMode(hDesDC,COLORONCOLOR);

 ::StretchBlt(hDesDC, rect.left, rect.top, rect.right, rect.bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,SRCCOPY); 
  直接用mfc自帶的static 圖片控件顯示bmp位圖資源 方法1:
   1) 更改屬性Picture Control屬性 
   2) 直接關聯上image: 設置Image屬性
   3) 更改type為Bitmap 
   
   方法2:(PictureEx類網上搜)
   1)添加控件變量為PictureEx對象
   2) 直接m_pic1.LoadBitmap(IDB_BITMAP1); 
  示例:
   1. 關聯 Picture Control 對象: m_stPicture
   2. 添加2個BMP資源 IDB_BITMAP1, IDB_BITMAP2
   3. 定義: HBITMAP m_hBitmap;
  4. 一開始顯示圖片
  

   BOOL CShowBmpDlg::OnInitDialog(){ 
   CDialog::OnInitDialog(); 
   ...... //顯示圖片 m_hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS); 
 m_stPicture.ModifyStyle(0xF, SS_BITMAP);
   m_stPicture.SetBitmap(m_hBitmap); 
   return TRUE;  // 除非設置了控件的焦點,否則返回 TRUE
  }

5. 切換圖片
void CShowBmpDlg::OnBnClickedOk(){

 static int nId = 0;
 nId++; 
 if (NULL != m_hBitmap)
 {  
  ::DeleteObject(m_hBitmap);
  m_hBitmap = NULL;
 } int nPicId = nId = nId % 2 ? IDB_BITMAP2 : IDB_BITMAP1; 
 m_hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(nPicId), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS); 
 m_stPicture.ModifyStyle(0xF, SS_BITMAP);
 m_stPicture.SetBitmap(m_hBitmap);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM