[MFC]透明图展示

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

 

一般我们可见的图形RGB三元色,对Alpha通道的话,它不一定会显示到窗体中来。

 

Windows窗体中要展示一张透明图相对还是比较困难的,

1.      例如像windows查看器那样,使透明像素显示查看器底色(近似白色),但对于半透明的图片显示起来效果不是特别好。

2.      例如像photoshop那样,使用一张斑点的底图,对于全透明示,显示底图,半透明时和底图颜色混合。

这两种方法的话,photoshop的方法相对来说,视觉效果相对比较好一点。

 

要实现类似photoshop这样的效果,首先我们需要一张底图:

1.      底图可以是一张小图,但必须是无缝的:可以扩展成一个无限大的图,像瓷砖一样,可以铺无限大,看起来是一体的。

2.      底图提供位置颜色查询,输入x/y查询像素点颜色

  

有了底图之后,我们就可以读取这张透明图:

1.读取原图片颜色信息

2.逐个像素读取(blue, green, red, alpha),当alpha不为255(255-不透明)

a)        读取底图对应x,y位置的颜色colorBk

b)        使用颜色混合:

blue = (blue *alpha + colorBk.blue * (255 – alpha))/255;

green = (green *alpha + colorBk.green * (255 – alpha))/255;

red = (red *alpha + colorBk.red * (255 – alpha))/255;

c)        alpha设置为255,不允许颜色被window缺省颜色混合

alpha = 255;

1. 把处理后的像素显示到窗体中

 

这样就可以展示一张和Photoshop类似效果的透明图形了。

 

注意: 使用CImage读取24/32位图形时,读取的字节序是BGR/BGRA。参考MSDN结构体定tagRGBTRIPLE/ tagRGBQUAD

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春夜喜雨

稀罕你的喜欢!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值