RGBA alpha 透明度混合算法


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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM