VC++中图像处理类CBitmap的用法

2020-01-06 13:59:45王旭
  • CBitmap bmp;    bmp.LoadBitmap(IDB_BITMAP1); 
  •       BITMAP bm; 
  •   bmp.GetBitmap(&bm);   
  •   CDC dc;    dc.CreateCompatibleDC(pDC); 
  •   CBitmap*pOldBmp=(CBitmap *)dc.SelectObject(&bmp);   
  •   pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dc,0,0,SRCCOPY);    pDC->SelectObject(pOldBmp); 
  •     bmp.DeleteObject(); 
  •   bmp.LoadBitmap(IDB_BITMAP2);  ?

    4 删除资源
     

    1. CBitmap bmp;    bmp.LoadBitmap(IDB_BITMAP); 
    2.     CBitmap *pOld=pDC->SelectObject(&bmp); 
    3.     // 此时位图对象还在pDC中,因此不能马上删除 
    4.   // 而是先将位图从DC中选出 然后再删除    pDC->SelectObject(pOld); 
    5.   bmp.DeleteObject(); 
    ?

    5 CBitmap 析构

    当CBitmap作为局部变量 在其退出作用范围后,会发生析构,这时候CBitmap会将其对应的位图资源(hBitmap )释放掉。

    若想继续使用该位图资源hBitmap,则在退出作用范围前,应将位图资源hBitmap和CBitmap对象通过Detach()函数进行分离

     

    复制代码 HBITMAP  CMyClass::Load()
    {
        CBitmap bmp;
        bmp.LoadBitmap(IDB_BITMAP);

     

        // 通过Detach 将资源与对象分离,这样bmp析构后,资源仍存在  
        // 否则 ,bmp析构时,会将位图资源一起析构掉,这样出了局部范围外,就不可再使用这个位图资源了
        return bmp.Detach();
    }

     

    6 在仅获得HBITMAP资源句柄情况下,如何获得这个资源的BITMAP信息

    BITMAP bm;
    GetObject(hBitmap,sizeof(BITMAP),&bm);

    7 在内存中开辟资源空间 将原图保存到内存中