您的位置:首页 > 其它

具有Alpha通道的图片合并

2015-09-16 21:00 253 查看
具有Alpha通道的图片合并:­

现在要计算怎么合并两个具有Alpha值的图片成为一个具有Alpha值的图片:­

设:­

第一层的不透明度是 a1(范围0-1),颜色是c1(范围0-255)­

第二层的不透明度是 a2(范围0-1),颜色是c2(范围0-255)­

两层合并后的不透明度是a,颜色是c­

则对任意的底色X(范围0-255)都有:­

合并一次的改变=两次合并的改变­

第一次合并颜色= X(1-a1)+c1a1­

第二次合并颜色= [X(1-a1)+c1a1](1-a2)+c2a2­

得出:­

X(1-a)+ca=[X(1-a1)+c1a1](1-a2)+c2a2=X(1-a1)(1-a2)+c1a1(1-a2)+c2a2­

于是有:­

1-a=(1-a1)(1-a2)­

ca=c1a1(1-a2)+c2a2­

所以两层合并的不透明度­

a=1-(1-a1)(1-a2)­

所以两层合并的颜色­

c=[c1a1(1-a2)+c2a2]/a=[c1a1+c2a2-c1a1a2]/a­

实例a:­

底层:不透明1 颜色:37, 104, 8­

上层:不透明0.8 颜色:104, 53, 8­

合并后颜色值: 91, 63,8­

37 * (1 - 0.8) + 104 * 0.8 = 90.6 约等于 91­

104 * (1 - 0.8) + 53 * 0.8 = 63.2 约等于 63­

8 * (1 - 0.8) + 8 * 0.8 = 8­

实例b:­

底层:不透明80 颜色:37, 104, 8­

上层:不透明80 颜色:104, 53, 8­

合并后颜色值: 93, 62,8­

合并后的不透明度:1-(1-0.8)(1-0.8)=1-0.2*0.2=0.96­

合并后的颜色:­

(37*0.8 + 104*0.8 - 37 * 0.8 * 0.8)/0.96 = 92.833333 约等于93­

(104*0.8 + 53*0.8 - 104 * 0.8 * 0.8)/0.96 = 61.5 约等于62­

实例C:­

底层:不透明50 颜色:37, 104, 8­

上层:不透明80 颜色:104, 53, 8­

合并后颜色值: 96, 59,8­

合并后的不透明度:1-(1-0.5)(1-0.8)=1-0.5*0.2=0.9­

合并后的颜色:­

(37*0.5 + 104*0.8 - 37 * 0.5 * 0.8)/0.9 = 95.555555 约等于96­

(104*0.5 + 53*0.8 - 104 * 0.5 * 0.8)/0.9 = 58.66666 约等于59

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: