yujiao12365
发表于 2018-3-12 15:34:01
不错,对初学者启发挺大的
拉你左手
发表于 2018-11-17 20:35:51
:)谢谢:)谢谢:)谢谢:)谢谢:)谢谢
codwine
发表于 2018-11-22 11:06:19
好东西,谢谢楼主
tech123
发表于 2019-2-1 19:16:32
贴子写的不错,赞一个!
小冰
发表于 2019-8-23 07:34:53
正巧需要,谢谢A5大人分享
dennis
发表于 2020-4-10 22:06:47
正好需要這個 謝謝樓主
music
发表于 2020-4-30 12:17:12
这个库我有成功编译过的。
swen29
发表于 2020-8-23 12:01:08
受教了!帮大忙啦!感谢!
yidada
发表于 2020-9-23 17:10:26
想看看代码
Fozy_Lord
发表于 2021-3-3 16:32:25
感谢楼主!
火热的心
发表于 2021-4-26 11:15:02
666支持楼主!!!!!!
xiojiji
发表于 2021-5-13 15:41:54
真好,我正好需要这个
Grays
发表于 2021-11-19 18:03:07
正好在看学习下
arthur
发表于 2021-12-22 21:38:19
感谢楼主分享
serena1230
发表于 2022-1-12 16:57:42
正在学习这方面的资料
twilightmemory
发表于 2024-3-19 00:14:52
谢谢LZ,好人一生平安
YY菌
发表于 2024-3-19 11:30:41
undefined 发表于 2014-6-3 14:47
不知道为什么我读取的png颜色会变得很奇怪,研究一下楼主的源码
// ====================
预乘Alpha和非预乘Alpha的区别,混合 = 背景*(1 - Alpha) + 前景*Alpha 就是属于传统的非预乘Alpha混合模式,而 混合 = 背景*(1 - Alpha) + 前景 则是预乘Alpha混合的新算法。预乘Alpha混合跟非预乘相比的好处有很多,比如:
1.减少一次乘法和除法运算开销提高效率(如果要支持背景层也是半透明的话,非预乘Alpha必须要经过除法运算),使用GDI+绘图测试就可以发现PARGB格式的Bitmap比ARGB格式要快六七倍。
2.在背景也是半透明的情况下,不仅需要计算混合后的颜色通道,还要计算混合后的新Alpha通道,如果是非预乘Alpha的话,必须使用不同的公式来分别计算颜色通道和Alpha通道。而预乘Alpha的ARGB4个通道均使用相同公式计算(这就意味着预乘Alpha有很好的利用SIMD指令集加速)。
3.非预乘Alpha只能表现不发光物体的遮挡效果,而预乘Alpha只要颜色通道的值>Alpha通道值就能模拟光照产生的高亮效果(特别是将Alpha值清0同时保留颜色值,就会得到对应PS的线性减淡混合效果)。
4.纹理采样的非临近插值的问题,比如在ARGB(0,0,0,0)和ARGB(1,1,1,1)中间采样得到到插值结果就是ARGB(0.5,0.5,0.5,0.5)(注意Alpha混合模式是不会影响纹理采样的插值模式的),这个值在非预乘Alpha混合模式下会表现为半透明灰色,而预乘Alpha则是半透明白色,你想想透明色和白色中间的插值过渡色怎么能是灰色呢?
综上所述:预乘Alpha在各方面均完胜于非预乘Alpha,所以传统的非预乘Alpha混合属于已经过时的算法,在实时渲染中能用预乘Alpha尽量使用预乘Alpha。