[原创] 关于 AlphaBlend 函数

在嵌入式开发中,使用AlphaBlend显示带Alpha通道的PNG图片时遇到问题。通常认为AlphaBlend对这类图不可用,需要自定义混合算法。但通过深入研究MSDN,发现只需将原图RGB分量乘以Alpha即可正确混合。微软的设计可能是为了平衡效率,减少了乘法运算,但引入了浮点运算。以下展示了修正后的Alpha混合公式。
摘要由CSDN通过智能技术生成

最近工作中写个工具软件要支持带Alpha通道的PNG图,使用libpng成功读取出了PNG的数据,但是用AlphaBlend进行显示的时候却遇到了问题。

在网上搜索了一下,好像很多前辈使用这个函数都不成功,最后得出的一致结论是AlphaBlend除了SourceConstantAlpha不等于255时可用以外,对带Alpha通道的图是显示不了的,需要自己写Alpha混合算法。因为是搞嵌入式开发,Alpha混合算法倒是很熟练了,所以也没多想就自己写了一个。回过头想想觉得还是有问题,难道微软会忽悠我们?后来仔细看了一下MSDN,恍然大悟。

微软的运算公式为:

Dst.Red   = Src.Red   + (1 - Src.Alpha) * Dst.Red 
Dst.Green = Src.Green + (1 - Src.Alpha) * Dst.Green 
Dst.Blue  = Src.Blue  + (1 - Src.Alpha) * Dst.Blue 

注意,以上公式中 Src.Alpha 已经转换成了浮点数,并已除以 255 ,所以取值范围是 0 ~ 1.0 。

我们都知道,正确的Alpha混合的公式是:

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值