改变位图大小

Code:
  1.  1. BOOL TranslateBitmapSize(    
  2.  2.                          IN HDC hCurScreemDC,   //当前屏幕DC,可通过GetDC获得    
  3.  3.                          IN HBITMAP hBmpSrc,    //原BITMAP句柄    
  4.  4.                          IN int nSrcWidth,      //原BITMAP的宽度    
  5.  5.                          IN int nSrcHeight,     //原BITMAP的高度    
  6.  6.                          OUT HBITMAP &hBmpDst,  //改变大小后的BITMAP的句柄    
  7.  7.                          IN int nDstWidth,      //改变大小后的BITMAP的宽度    
  8.  8.                          IN int nDstHeight      //改变大小后的BITMAP的高度    
  9.  9.                          )    
  10. 10. {    
  11. 11.     if (hBmpSrc == NULL || hCurScreemDC == NULL)    
  12. 12.     {    
  13. 13.         return FALSE;    
  14. 14.     }    
  15. 15.     if (hBmpDst != NULL)    
  16. 16.     {    
  17. 17.         DeleteObject(hBmpDst);    
  18. 18.     }    
  19. 19.     HDC hOldSrcDC = NULL;    
  20. 20.     HDC hOldDstDC = NULL;    
  21. 21.     HDC hSrcDC = CreateCompatibleDC(hCurScreemDC);    
  22. 22.     HDC hDstDC = CreateCompatibleDC(hCurScreemDC);    
  23. 23.     hBmpDst = CreateCompatibleBitmap(hCurScreemDC,nDstWidth,nDstHeight);    
  24. 24.     hOldSrcDC = (HDC)SelectObject(hSrcDC,hBmpSrc);    
  25. 25.     hOldDstDC = (HDC)SelectObject(hDstDC,hBmpDst);    
  26. 26.     StretchBlt(hDstDC,0,0,nDstWidth,nDstHeight,hSrcDC,0,0,nSrcWidth,nSrcHeight,SRCCOPY);    
  27. 27.     SelectObject(hSrcDC,hOldSrcDC);    
  28. 28.     SelectObject(hDstDC,hOldDstDC);    
  29. 29.     DeleteObject(hSrcDC);    
  30. 30.     DeleteObject(hDstDC);    
  31. 31.     return TRUE;        
  32. 32. }    

原理:

创建两个与当前屏幕DC兼容的DC,创建一个与当前屏幕兼容的位图句柄,把两个位图句柄分别选入两个兼容DC,然后通过StretchBlt函数进行DC拷贝,目的位图句柄就获得了改变后的位图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值