欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
CreateCompatibleBitmap - fengqing888的日志 - 網(wǎng)易博...

函數功能:該函數創(chuàng )建與指定的設備環(huán)境相關(guān)的設備兼容的位圖。

  函數原型:HBITMAP CreateCompatibleBitmap(HDC hdc,int nWidth,int nHeight);

  參數:

  hdc: 設備環(huán)境句柄。

  nWidth:指定位圖的寬度,單位為像素。

  nHeight:指定位圖的高度,單位為像素。

  返回值:如果函數執行成功,那么返回值是位圖的句柄;如果函數執行失敗,那么返回值為NULL。若想獲取更多錯誤信息,請調用GetLastError。

  備注:由CreateCompatibleBitmap函數創(chuàng )建的位圖的顏色格式與由參數hdc標識的設備的顏色格式匹配。該位圖可以選入任意一個(gè)與原設備兼容的內存設備環(huán)境中。由于內存設備環(huán)境允許彩色和單色兩種位圖。因此當指定的設備環(huán)境是內存設備環(huán)境時(shí),由CreateCompatibleBitmap函數返回的位圖格式不一定相同。然而為非內存設備環(huán)境創(chuàng )建的兼容位圖通常擁有相同的顏色格式,并且使用與指定的設備環(huán)境一樣的色彩調色板。

  速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;頭文件:wingdi.h;庫文件:gdi32.lib。

  PS:需要與CreateCompatibleDC配合使用

 

 

 

物理HDC 設備底層會(huì )擁有顯存等資源,但是兼容DC并沒(méi)有給圖像像素提供內存空間,因此兼容DC總是和BITMAP配合使用,這樣一來(lái),兼容DC就利用BITMAP的圖像像素數據空間給自己提供類(lèi)似于顯存的內存空間.

這樣有很多好處,以來(lái)我們可以在加載圖片后,在圖片上利用DC的各種繪圖功能.請看如下示例:

兼容DC在建立之初,只有1*1像素的尺寸,SelectObject選擇bitmap以后才可以進(jìn)行繪圖.

內存DC的可見(jiàn)區域是簡(jiǎn)單的區域,不像物理DC可見(jiàn)區域可能被其他窗口覆蓋而產(chǎn)生復雜的可見(jiàn)區域.由于DC的任何繪圖都需要考慮在可見(jiàn)區域內繪圖,絕對不能超出可見(jiàn)區域的范圍.因此每個(gè)GDI繪圖輸出最終都需要和構成復雜可見(jiàn)區域的每一個(gè)巨型區域進(jìn)行剪裁輸出,因此物理DC的繪圖效果會(huì )比兼容DC速度慢一些.這也就是我們經(jīng)常用兼容DC進(jìn)行雙緩存輸出的一個(gè)原因


HDC hdc=GetDC(hwnd);
HDC memdc=CreateCompatibleDC(hdc);
RECT rc;
BITMAP bmp;
HBITMAP holdbmp,hbmp=LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_CLOCK));//從資源加載位圖
holdbmp=(HBITMAP)SelectObject(memdc,hbmp);//這里把hbmp的位圖選擇到兼容DC memdc,之后這個(gè)兼容DC就擁有和
//hbmp同樣大小的繪圖區域,注意超出位圖返回的GDI輸出都是無(wú)效的.
GetObject(hbmp,sizeof(BITMAP),&bmp);//這里獲取位圖的大小信息,事實(shí)上也是兼容DC繪圖輸出的范圍
SetRect(&rc,0,0,bmp.bmWidth,bmp.bmHeight);
DrawText(memdc,"Center Line Text" -1,&rc,DT_VCENTER|DT_SINGLELINE|DT_CENTER);//在兼容DC中間位置輸出字符串
//這樣以來(lái)我們就相當于把hbmp這個(gè)位圖加上了文字標注,我們可以把這個(gè)增加了文字標注的位圖保存起來(lái).一個(gè)簡(jiǎn)單的圖像處理基本就OK了.
SelectObject(memdc,holdbmp);//復原兼容DC數據.
DeleteDC(memdc);


***********************************************************

 

 

首先現象是這樣的:  
  我的程序突然有一天,一個(gè)Create出來(lái)的窗口畫(huà)不出東西,開(kāi)了天窗!跟進(jìn)去一看,是調用CBitmap::CreateBitmap失?。ǚ祷刂禐镕ALSE)。用GetLastError查到的原因是“ERROR_NOT_ENOUGH_MEMORY”。  
  很奇怪,這個(gè)view的代碼我并沒(méi)有動(dòng)??!我試著(zhù)改成CBitmap::CreateCompatibleBitmap,好了!算了,不管了,就這么著(zhù)吧~  
  誰(shuí)知,過(guò)了些時(shí)日,別的窗口又開(kāi)天窗了!  
  這次我把CreateBitmap改成CreateCompatibleBitmap,也不是每次都成功,時(shí)不時(shí)的就會(huì )創(chuàng )建失??!  
   
  查msdn,關(guān)于CreateBitmap   API有如下這一段話(huà):  
  The   CreateBitmap   function   can   be   used   to   create   color   bitmaps.    
  However,   for   performance   reasons   applications   should   use   CreateBitmap   to   create   monochrome   bitmaps   and   CreateCompatibleBitmap   to   create   color   bitmaps.    
  Whenever   a   color   bitmap   returned   from   CreateBitmap   is   selected   into   a   device   context,   the   system   checks   that   the   bitmap   matches   the   format   of   the   device   context   it   is   being   selected   into.    
  Because   CreateCompatibleBitmap   takes   a   device   context,   it   returns   a   bitmap   that   has   the   same   format   as   the   specified   device   context.    
  Thus,   subsequent   calls   to   SelectObject   are   faster   with   a   color   bitmap   from   CreateCompatibleBitmap   than   with   a   color   bitmap   returned   from   CreateBitmap.  
   
  這段話(huà)看著(zhù)挺繞,說(shuō)CreateCompatibleBitmap   API比CreateBitmap   API的效率更高一些。那么,我的問(wèn)題之一是:  
  CBitmap的這兩個(gè)屬性,是否也如API一樣,CreateCompatibleBitmap比CreateBitmap的效率高??  
   
  我的問(wèn)題之二:搜了一下,我的程序里,有二十多處地方(17個(gè)窗口)調用CreateBitmap,10處地方調用CreateCompatibleBitmap,且這些占用bitmap的窗口只在最后退出的時(shí)候才銷(xiāo)毀。有經(jīng)驗的同仁看看,調用的地方是不是太多了?如果都換成CreateCompatibleBitmap,資源占用情況是否會(huì )有所改觀(guān)?  

——————————————————————————

在Create之前,都有類(lèi)似如下的代碼:  
  if(NULL   !=   m_pMemBitmap)  
  {  
              m_pMemBitmap->DeleteObject();  
              delete   m_pMemBitmap;  
  }  
  m_pMemBitmap   =   new   CBitmap;  
  BOOL   b   =   m_pMemBitmap->CreateCompatibleBitmap(pDC,rcClient.Width(),rcClient.Height());  
  感覺(jué)沒(méi)有什么可泄漏的。  
   
  ==================>  
   
  暈,真是這樣寫(xiě)的話(huà)就泄露了,而且露的很厲害  
  if(NULL   !=   m_pMemBitmap)  
  {  
              m_pMemBitmap->DeleteObject();  
              delete   m_pMemBitmap;  
              m_pMemBitmap   =   NULL;//光delete,   m_pMemBitmap   是不會(huì )為NULL的  
  }

 
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
CreateCompatibleDC,CreateCompatibleBitmap,SelectObject詳解
關(guān)于memory device context內存設備上下文和位圖
BeginPaint和GetDC有什么區別
GDI編程2
VB抓圖
對Windows程序中設備上下文DC(device context)的理解
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久