TransparentBlt 函数在Windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。
Windows98下的TransparentBlt会产生资源泄漏,所以不建议在WIN98下使用该函数。
TransparentBlt函数原型如下:

BOOL TransparentBlt(
HDC hdcDest,      // 目标DC
int nXOriginDest,   // 目标X偏移
int nYOriginDest,   // 目标Y偏移
int nWidthDest,     // 目标宽度
int hHeightDest,    // 目标高度
HDC hdcSrc,         // 源DC
int nXOriginSrc,    // 源X起点
int nYOriginSrc,    // 源Y起点
int nWidthSrc,      // 源宽度
int nHeightSrc,     // 源高度
UINT crTransparent  // 透明色,COLORREF类型
);

使用例子:

CBitmap DispBmp;
 CBitmap *OldBmp;
 CDC SourceDC;
 DispBmp.LoadBitmap("TEST_BITMAP");//如果是IDB_XXX则不需加引号!
 SourceDC.CreateCompatibleDC(PDC);
 OldBmp = SourceDC.SelectObject(&DispBmp);
 ::TransparentBlt(PDC->m_hDC,0, 0,128, 128, SourceDC.m_hDC,0,0,128,128,RGB(0,0,0));
 SourceDC.SelectObject(OldBmp);

要注意的是TransparentBlt函数使用的位图是8位或者24位的。

此外,还有两个相近的函数:StretchBlt 和 BitBlt,那么他们的区别在何处?

BOOL StretchBlt                                     //此函数将一个位图资源从一个矩形区域拷贝到另一个矩形区域,即缩放位图,但不能指定透明色

( int x, //指定目的矩形区域左上角的X坐标

int y, //指定目的矩形区域左上角的Y坐标

int nWidth, //指定目的矩形区域的宽度

int nHeight, //指定目的矩形区域的高度

CDC* pSrcDC,

int xSrc, //指定源矩形区域左上角的X坐标

int ySrc, //指定源矩形区域左上角的Y坐标

int nSrcWidth, //指定源矩形区域的宽度

int nSrcHeight, //指定源矩形区域的高度

DWORD dwRop //此参数参考MSDN,SRCCOPY类型为直接拷贝 );

BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop ); //此函数同样用来拷贝位图资源,但不具备缩放功能。

也就是说:bitblt直接按你指定的大小输出源dc到目标dc,而strechblt会调整你源dc大小,使之适应你所指定的目标dc大小,再输出。strechblt输出的图总是能够充填满你指定的目标DC区域,而bitblt输出的图无法布满目标dc制定区域。

TransparentBlt用法相关推荐

  1. TransparentBlt函数的用法

    最近某次Windows程序设计的作业,老师让我们完成在游戏背景上贴人物图,并且人物能根据键盘的操作完成简单的走动,然后就遇到问题了--人物背景没办法透明化. 记录一下TransparentBlt函数的 ...

  2. TransparentBlt函数用法

    m_bmpPaint.LoadBitmap(IDB_XXX); //第一步将资源的bitmap载入 //第二步在onpaint里面进行描画 CPaintDC pdc(this); CDC dc; CB ...

  3. MFC基于对话框如何添加位图并使位图背景透明(TransparentBlt函数)

    MFC中比较重要的一部分学习内容即是绘图,而绘图时我们会发现如果想插入一张图片而又不想要图片的背景,或者已经把图片的背景用Ps去掉了,但是在MFC窗口中显示图片的时候又有了白色的背景,这个时候就可以使 ...

  4. TransparentBlt、StretchBlt与BitBlt三个函数的区别

    TransparentBlt.StretchBlt与BitBlt三个函数的区别 BOOL StretchBlt( int x,  //指定目的矩形区域左上角的X坐标 int y,  //指定目的矩形区 ...

  5. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  6. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  7. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  8. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  9. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

最新文章

  1. Spring Boot+Maven实现车牌训练、识别系统
  2. GirdView的文本属性对象省略溢出标记设置
  3. 报错解决:fatal error: json/json.h: No such file or directory
  4. java方面的文献综述怎么写_文献综述应该怎么写?
  5. C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
  6. android导航二级分类,Android实现腾讯新闻的新闻类别导航效果
  7. jrockit_JRockit – JRCMD有用的命令
  8. vue商品列表滚动效果_vue+帧动画 实现 获奖奖品列表滚动循环展示
  9. 记录一个美丽的小县城
  10. 融资12亿的春雨CEO去世,为什么创业者的焦虑停不下来?
  11. 求求你了,不要再自己实现这些逻辑了,开源工具类不香吗?
  12. 通过chrome的拓展程序访问其他网页
  13. 基于STM32构建EtherCAT主站(SOEM方案)5
  14. 苹果手机录屏软件_4款手机录屏软件推荐,你觉得哪款更好用?
  15. 需求调研第二篇--调研准备阶段避免哪些错误
  16. 使用Cmd设置 静态/动态IP
  17. 美国德保罗大学计算机排名,2018福布斯美国最佳大学排名德保罗大学排名第243...
  18. Spring Cloud负载均衡,报错:No instances available for localhost
  19. GraphQL学习过程应该是这样的 1
  20. 微信小程序-将时间转换成几秒前 几分钟前 几小时前 几天前等时间格式

热门文章

  1. @vue/cli3--使用命令创建项目--方法/实例
  2. 代理加盟共享充电宝的理由
  3. 黄奕出轨密会富商老公发飙怒骂 前夫补刀:淫猫忘不了偷腥
  4. 基于Android平台下的科学计算器
  5. C语言编写自己的日志系统
  6. 学的计算机专业要购怎样的笔记本电脑,参考:上大学了买电脑吗?大学新生笔记本电脑购置全攻略...
  7. 事件注册方法、阻止默认事件、事件对象、事件冒泡:事件委托、事件捕获、重置表单
  8. Clion下的STM32环境安装(包运行调试)
  9. The elements of programming style,好程序的要素
  10. CentOS 6 安装 Nvidia 显卡驱动