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。
页: 1 2 [3]
查看完整版本: 【C】libpng的使用