已知 Alpha 混合公式:
Blend = Fore * A + Back * ( 1 – A )
也可写着:
Blend = Back + ( Fore – Back ) * A
即可知:
A=( Blend – Back ) / ( Fore – Back )
Fore = ( Blend – Back * ( 1 – A ) ) / A = ( Blend – Back ) / A + Back
由于 A 和Fore 的取值范围都只能是 [0,1],
当 ( Blend – Back ) > 0 时, ( Fore – Back ) 必须大于等于 ( Blend – Back ),即 Fore >= Blend,Fore 的值域为[Blend, 1.0],Fore=Blend时A值为1,随 Fore 增大而减小,Fore=1时A值最小。
此时A的值域为[(Blend-Back)/(1-Back), 1]。
当 ( Blend – Back ) < 0 时, ( Fore – Back ) 必须小于等于 ( Blend – Back ),即 Fore <= Blend,Fore 的值域为[0, Blend],A随Fore增大到Blend而逐渐增大到1。
此时A的值域为[(Blend-Back)/(0-Back), 1]。
把 R,G,B分别代入计算,A值域重叠的部分即为最可能的A值范围。
由于JPG有损压缩等原因,可能导致原本透明度极小的像素由于质量损失而计算出不正确的结果。例如混合后的 blue 原本是10,压缩后成了0,代入 (Blend-Back)/(0-Back) 结果为1,反而成了不透明的。
转载请注明:《从Alpha混合后的颜色和已知的背景色计算前景色和透明度》