alpha混合与porter/duff

本文介绍了Porter/Duff混合算法及其在图形处理中的应用,包括预乘原理、12种混合模式的定义以及与Alpha混合的区别。通过详细解释和实例,阐述了在不同场景下选择合适混合模式的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

稍微接触过一点图形相关应用的人应该都会知道alpha混合,再深入一点就应该会看到porter, duff两位神人的名字,他们是最早在SIGGRAPH上提出图形混合概念的前辈。

对于alpha混合,最简单的说法是Src*alpha + Dst*(1-alpha),至少这是我第一次了解到的alpha算法,但事实上porter, duff提出的混合远比这个复杂。因为每次都会忘记他们提出的那12个混合方式是怎么来的,所以在这里整理一次。

首先,一个大前提,以下porter/duff公式是针对预乘(premultiplied)后的结果的。什么是预乘?假设一个像素点,用RGBA四个分量来表示,记做(R,G,B,A),那预乘后的像素就是(R*A,G*A,B*A, A),这里A的取值范围是[0,1]。所以,预乘就是每个颜色分量都与该像素的alpha分量预先相乘。可以发现,对于一个没有透明度,或者说透明度为1的像素来说,预乘不预乘结果都是一样的。

为什么要用预乘方式来表示像素?主要是这样会使公式更简单。而且实际上,在实际运算过程中,使用预乘像素进行运算在某些情况下效率会更高。但预乘会对运算精度有一定影响。关于预乘的种种内容,这里不讨论,有兴趣可以自行研究。

开始讨论porter/duff混合公式之前,先定义几个符号

C - 表示像素的颜色,即(RGBA)的RGB部分,C是color的缩写

A - 表示像素的透明度,A即alpha

s  - 表示两个混合像素的源像素,s即source

d - 表示两个混合像素的目标像素,d即destination

r - 表示两个像素混合后的结果,r即result

F - 表示作用于

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值