程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> StretchBlt和StretchDIBits

StretchBlt和StretchDIBits

編輯:C++入門知識

StretchBlt:從源矩形中復制一個位圖到目標矩形,必要時按目標設備設置的模式進行圖像的拉伸或壓縮,如果目標設備是窗口DC,則意味著在窗口繪制位圖,大致的使用代碼如下:

  DrawImage(HDC hdc, HBITMAP hbm,       HDC hdcMemory =     HBITMAP old_bmp = 
     BITMAP bm = {      ::GetObject(hbm, (bm), & 
          hdc,                              
         target_rect.left,                   
         target_rect.top,                    
         target_rect.right - target_rect.left,    
         target_rect.bottom - target_rect.top,    
         hdcMemory,                               
         ,                                
         ,                               
         bm.bmWidth,                        
         bm.bmHeight,                        
         SRCCOPY);                                
 
   }

 StretchDIBits:該函數將DIB(設備無關位圖)中矩形區域內像素使用的顏色數據拷貝到指定的目標矩形中,如果目標設備是窗口DC,同樣意味著在窗口繪制位圖,大致的使用代碼如下:

  DrawImage(HDC hdc, LPBITMAPINFOHEADER lpbi, * bits,            hdc,                                    
         target_rect.left,                       
         target_rect.top,                        
         target_rect.right - target_rect.left,   
         target_rect.bottom - target_rect.top,   
         ,                                      
         ,                                      
         lpbi->biWidth,                       
         abs(lpbi->biHeight),                 
         bits,                                   
         (LPBITMAPINFO)lpbi,                     
         DIB_RGB_COLORS,                         
         SRCCOPY);                                
 }

       

也就是說StretchDIBits比StretchBlt多消耗了從內存地址空間拷貝圖像數據到GDI地址空間的時間。實際測試結果在XP和Win7系統下兩者效率幾乎沒有區別,所以可以放心大膽的使用StretchDIBits,畢竟內存數據處理起來要方便的多。

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved