天天看點

RGBA alpha 透明度混合算法

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;

繼續閱讀