BMP圖片的加載方式:資源 VS 文件


 在程序中加載位圖有很多方法,各有各的好處。這里簡單說一下在資源里和文件里加載的區別。

第一、在資源里加載位圖

  這種方法就是在工程里的“資源視圖”-->“添加資源”-->"Bitmap"-->"導入位圖"

  每個資源都會有一個資源ID,使用位圖時就通過資源ID對他進行控制。

  然后在設置背景圖片是只需在OnPaint();里添加如下

        CPaintDC dc(this);
        CRect rc;
        GetClientRect(&rc);

        CDC memDC;//目標內存
        memDC.CreateCompatibleDC(&dc);//創建內存兼容環境
        CBitmap bmpBackground;
        bmpBackground.LoadBitmap(IDB_BITMAP1);//資源ID
        BITMAP bitmap;
        bmpBackground.GetBitmap(&bitmap);//獲取位圖
        CBitmap *oldbtimap = memDC.SelectObject(&bmpBackground);

        dc.StretchBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);//

  這樣直接運行就可以顯示位圖了,但是有個缺點就是,如果位圖比較大的話,最終生成的應用程序會很大,位圖會包含在exe程序中,如果位圖比較多的話,應用程序的大小就比較恐怖了,估計要幾十兆了。

第二、在文件中直接加載

  這種方法用到函數LoadImage();//從文件中加載位圖

1 HANDLE WINAPI LoadImage(
2   _In_opt_  HINSTANCE hinst,//實例句柄
3   _In_      LPCTSTR lpszName,//文件名
4   _In_      UINT uType,//文件類型,包括IMAGE_BITMAP,IMAGE_CURSOR,IMAGE_ICON
5   _In_      int cxDesired,//這個在加載ICON時使用
6   _In_      int cyDesired,//
7   _In_      UINT fuLoad//加載的方式 ,如LR_LOADFROMFILE
8 );

  使用方法如下:

 1         CPaintDC dc(this);
 2         CRect rc;
 3         GetClientRect(&rc);
 4 
 5         CBitmap bmpBackground;
 6         bmpBackground.DeleteObject();
 7         HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,L"Background.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//加載位圖
 8         bmpBackground.Attach(hBitmap);//綁定
 9 
10         CDC memDC;//目標內存
11         memDC.CreateCompatibleDC(&dc);//創建內存兼容環境
12         memDC.SelectObject(bmpBackground.m_hObject);//
13         dc.BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);

  這種方法加載位圖只需將圖片和應用程序放在同一個目錄下,生成的應用程序不會和位圖產生太大的關聯,會很小,而且還可以自己替換背景圖片。

  總結一下,感覺還是第二種方法比較方便,生成的應用程序很小,位圖可以自己替換。


免責聲明!

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



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