具有Alpha通道的图片合并

来源:互联网 发布:淘宝 订单 清洗 编辑:程序博客网 时间:2024/04/29 21:22

具有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

0 0