RGBA alpha 透明度混合算法 .
分類: 圖像處理 Ps技術 2011-05-25 09:11 1112人閱讀 評論(0) 收藏 舉報
Alpha 透明度混合算法,網上收集整理,分成以下三種:
一、 R1,G1,B1,Alpha1 為前景顔色值,R2,G2,B2,Alpha2 為背景顔色值,則
前景色 R = R1 * Alpha1 + R2 * Alpha2 * (1-Alpha1) ;
G = G1 * Alpha1 + G2 * Alpha2 * (1-Alpha1) ;
B = B1 * Alpha1 + B2 * Alpha2 * (1-Alpha1) ;
背景色 Alpha = 1 - (1 - Alpha1) * ( 1 - Alpha2) ;
R = R / Alpha ;
G = G / Alpha ;
B = B / Alpha ;
二、半透明算法:
混合算法目前在常用到的算法是AlphaBlend。
計算公式如下:假設一幅圖象是A,另一幅透明的圖象是B,那麼透過B去看A,看上去的圖象C就是B和A的混合圖象,
設B圖象的透明度為alpha(取值為0-1,1為完全透明,0為完全不透明).
Alpha混合公式如下:
R(C)=(1-alpha)*R(B) +
alpha*R(A)
G(C)=(1-alpha)*G(B) + alpha*G(A)
B(C)=(1-alpha)*B(B) + alpha*B(A)
R(x)、G(x)、B(x)分别指顔色x的RGB分量原色值。從上面的公式可以知道,Alpha其實是一個決定混合透明度的數值。
改變這個
alpha 值可以得到一個漸變的效果。
分離RGB色用"位與"、"移位"運算的方法;
透明的比例按2的N次幂來分級,這樣可以快速運算。
如果是按32級
Alpha = 1/32
B圖的權重 = (32-n)/32,則A圖的權重= n/32,
可以得到這樣的算法:
R(C)= (32-n) * R(B)+ n* R(A);
再對R(C)右移5位(除以32)就可以了
透明的處理:
假設指定B上的黑色透明色,則碰到B上的顔色為黑色,則不顯示黑色,改為顯示A上這個位置的顔色。
三、簡易Alpha混合算法:首先,要能取得上層與下層顔色的 RGB三基色,
然後用r,g,b 為最後取得的顔色值;r1,g1,b1是上層的顔色值;r2,g2,b2是下層顔色值
若Alpha=透明度,則
當Alpha=50%時,
r = r1/2 + r2/2;
g = g1/2 + g2/2;
b = b1/2 + b2/2;
當Alpha<50%時,
r = r1 - r1/ALPHA + r2/ALPHA;
g = g1 - g1/ALPHA + g2/ALPHA;
b = b1 - b1/ALPHA + b2/ALPHA;
當Alpha>50%時,
r = r1/ALPHA + r2 - r2/ALPHA;
g = g1/ALPHA + g2 - g2/ALPHA;
b = b1/ALPHA + b2 - b2/ALPHA;