win32的BitBlt和StretchBlt

参考
https://blog.csdn.net/baidu_37503452/article/details/73484646
https://www.cnblogs.com/fwycmengsoft/p/4028876.html

参数都是自注释的,一看就懂,不说了

BOOL StretchBlt(
    HDC hdcDest,//目标DC
    int xDest,
    int yDest,
    int wDest,
    int hDest,
    HDC hdcSrc,//源DC
    int xSrc,
    int ySrc,
    int wSrc,
    int hSrc,
    DWORD rop
);

BOOL TransparentBlt(
    HDC hdcDest,
    int xoriginDest,
    int yoriginDest,
    int wDest,
    int hDest,
    HDC hdcSrc,
    int xoriginSrc,
    int yoriginSrc,
    int wSrc,
    int hSrc,
    UINT crTransparent
);  //此函数同样具有缩放功能,但此函数最后一个参数用来指定作为透明色的RGB;

BOOL BitBlt(
    HDC hdc,
    int x, //贴到目标上的的x坐标
    int y,
    int cx, //宽
    int cy,
    HDC hdcSrc,//源
    int x1, //开始贴的x坐标
    int y1,
    DWORD rop
);  //此函数同样用来拷贝位图资源,但不具备缩放功能.

最后一个参数的含义
BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。
DSTINVERT:表示使目标矩形区域颜色取反。
MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。
MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。
NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。
NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。
PATCOPY:将特定的模式拷贝到目标位图上。
PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。
然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。

PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。
SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。
SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。
SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。
SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。
SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。
WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。

我自己的应用场景是图片有大有小,而我展示的窗口的大小是固定的(最初是为了方便所以固定了大小),所以需要获取图片宽高,如果图片比窗口小,那就BitBlt,如果比窗口大,那就StretchBlt

注意StretchBlt的默认模式有时在贴图(尤其渐变色)时会失真,可以这样SetStretchBltMode(hdc, HALFTONE);设置一下StretchBlt的模式解决
MSDN说

设置HALFTONE伸展模式后,应用程序必须调用SetBrushOrgEx函数来设置画笔原点。如果不这样做,会发生刷子错位。

SetBrushOrgEx(hDestDC, 0, 0, NULL);

如果是StretchBlt绘图的最后一步就不用考虑这个问题了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值