BitBlt和StrectchBlt有什么区别

BitBlt不能变尺寸,但是StrectchBlt可以变尺寸,在使用StrectchBlt时要注意,首先要设置一下SetStretchBltMode,通常设成HALFTONE,这样缩放时就不会失真。  

HDC         hdcMem   ;     
  HBITMAP   hBmp;
   
  hdcMem   =   CreateCompatibleDC   (hDC)   ;//创建兼容
DC   
  hBmp   =   CreateCompatibleBitmap(hDC,   100,   100);//创建兼容位图并指定宽和高
   
  SelectObject   (hdcMem,   hBmp)   ;//选进
DC   
  bSuccess   =   BitBlt   (hDC,   //目标
DC   
                       0,   0,         //目标的起始位置
   
                       50,50,       //   要BitBlt的区域宽和高
   
                       hdcMem,   //源
DC   
                       pRcDIB->left,   pRcDIB->top,//源的起始位置
   
                       SRCCOPY)   ;//模式   有多种操作   SRCCOPY是用源覆盖目标
   
  DeleteDC   (hdcMem)   ;

BitBlt函数方法:   
  GDI的BitBlt函数的功能是将图形数据块从一个位置搬移到另一个位置,源和目标
   
  位图可以在同一个设备文本对象,也可以在不同的设备文本对象,函数原型如下:
   
    
BitBlt(HDC   hDC,int   x,int   y,int   cx,int   cy,HDC   hDCSrc,int   xSrc,   
  int   ySrc,DWORD   dwRop);参数dwRop为光栅操作码,决定位图的显示方式,

DPtoLP是将设备坐标转换为逻辑坐标。如果你用的是MM_TEXT映射模式,又没有改变原点,那么不需要用这个函数,因为此时逻辑坐标就是设备坐标。现在假如你改变了映射模式,然后用GetWindowRect得到了一块矩形坐标,你又试图用StrectchBlt往其中绘制位图,这时就有问题了:因为GetWindowRect返回的坐标是设备坐标,而StretchBlt使用的却是逻辑坐标,直接用得到的矩形坐标绘图,肯定出问题。这时就需要用DPtoLP将GetWindowRect得到的RECT坐标转换为逻辑坐标,然后才能作为参数调用StretchBlt。一般来说,USER函数用的都是设备坐标,而GDI函数都是用逻辑坐标。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值