http://blog.csdn.net/xhhjin/article/details/6445460
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;
