BitBlt和StrectchBlt有什么区别

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

HDC hdcMem ;
HBITMAP hBmp

hdcMem = CreateCompatibleDC (hDC) ;//
创建兼容
DC
hBmp
CreateCompatibleBitmaphDC 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函数都是用逻辑坐标。

你可能感兴趣的:(bit)