【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 1572|回复: 2

GDI的透明效果怎么实现??

[复制链接]
发表于 2012-10-3 15:31:43 | 显示全部楼层 |阅读模式
GDI的透明效果怎么实现
只用纯GDI
发表于 2012-10-3 22:08:38 | 显示全部楼层
本帖最后由 夜行的猫仔 于 2012-10-3 22:35 编辑

纯GDI的透明还是比较好做的。
只要靠的是遮罩抠图的办法。
就是首先要获取扣掉背景的区域。通常用一种颜色标注(常见的bmp背景是粉红色的)。然后从原图像中将这块区域减去。
发表于 2012-10-4 00:46:06 | 显示全部楼层
这个附件里面有你需要的代码。
金山快盘附件win32位图的加载.rar(313.21KB)

简单解释一下:
  1. //异或
  2. BitBlt(BufferDC,nX,nY,bmpSpirit.bmWidth,bmpSpirit.bmHeight,memDC,0,0,SRCINVERT);  
  3.         //yu
  4. BitBlt(BufferDC,nX,nY,bmpSpirit.bmWidth,bmpSpirit.bmHeight,maskDC,0,0,SRCAND);
  5. //异或
  6. BitBlt(BufferDC,nX,nY,bmpSpirit.bmWidth,bmpSpirit.bmHeight,memDC,0,0,SRCINVERT);
复制代码
异或 、and 、异或 这三步将需要扣掉的区域通过异或操作过滤掉。两次异或就等于什么也没做,但是中间将遮罩DC的maskDC里面的数据与需要抠图的数据and运算以后,扣掉的部分就无法还原,造成了“扣掉背景”的结果。这个是基本算法,现在已经不用了,现在XP系统以后自带的GDI+里面的函数实现抠图、半透明都非常方便。但是这个算法在任何的机器上(手机、嵌入式系统)都是可行的!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-6-29 06:04

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表