顏色ARGB的混合

2021-09-09 03:51:17 字數 1558 閱讀 1480

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;

c 中獲取顏色的argb值

c 中獲取顏色的argb值 顏色有4個要素,a alpha,透明度 r red,紅色成分 g green,綠色成分 b blue,藍色成分 都是byte型別的,把他們合到乙個int32中就可以了.舉例 int mycolor color c color.red 自己設定想要的某個顏色。mycolor...

關於顏色混合

ccsprite有乙個ccblendfunc型別的blendfunc 結構體成員,可以用來設定描繪時的顏色混合方案。ccblendfunc包含了乙個src和乙個dst,分別表示目標和源的運算因子。如果我們對乙個sprite使用setblendfunc方法,如 spritesetblendfunc c...

關於顏色混合

飛機大戰新增子彈的時候,子彈總是有背景的黑色,可以採用顏色混合的方法解決。在子彈初始化的時候 ccblendfunc cbl this setblendfunc cbl ccblendfunc 有兩個引數,第乙個引數代表源 也就是子彈 的顏色,第二個引數代表目標 也就是地圖背景 的顏色。1.glbl...