alpha blending演算法 詳細解讀

2021-07-10 20:12:09 字數 965 閱讀 1175

一幅彩色影象的每個畫素用r,g,b三個分量表示,若每個分量用8位,那麼乙個畫素共用3x8=24位表示。

在用32位表示乙個畫素時,若r,g,b分別用8位表示,剩下的8位常稱為α通道(alpha channel)位。它用來表示該畫素如何產生特技效果,即通常我們說的半透明。

alpha的取值一般為0到255。

為0時,表示是全透明的,即是看不見的。為255時,表示是顯示原始圖的。中間值即為半透明狀態。

計算alpha blending時,通常的方法是將源畫素的rgb值,分別與目標畫素(如背景)的rgb按比例混合,最後得到乙個混合後的rgb值。

方法:

r =( r_src * alpha + r_dest * (256 - alpha) )/256;
含義即為源與目標各佔的百分比。

簡化後:

r = ( (r_src * alpha - r_dest * alpha)  + r_dest * 256 )/256;

除256,也即右移8,即:

r = (r_src - r_dest) * alpha >> 8 + r_dest;

在microwindows中也有類似的**:

fblin32alpha.c

while (--h >= 0)

dst8 += dlinelen_minus_w4;

src8 += slinelen_minus_w4;

}

如果你使用的資料是yuv資料,那麼根據yuv與rgb的轉換公式:

y = 0.299r + 0.587g + 0.114b

u= (b-y)*0.565

v= (r-y)*0.713

也可以直接對yuv應用上面的公式計算alpha blending,不必轉換成rgb再混合。

演算法基礎( 演算法)

演算法基礎 演算法 hash演算法有兩種,即sha 1和md5演算法這裡先介紹md5演算法.md5產生乙個128位的hash值,在經過一寫初始樹立後,將明文分成了512位的塊,再將每一塊分成16個32位的子塊。演算法的輸出是4個32位的塊,連線起來構成128位的hash值。首先,將訊息填充到比512...

演算法 分治演算法

分治策略主要利用遞迴來解決問題,它包括以下三個步驟 分解 將問題分解為一與原問題類似並且比原問題規模更小的子問題 解決 當分解的子問題足夠小時,直接給出答案,否則用遞迴打方式求解 合併 將子問題的解合成原問題的解 下面考慮乙個簡單的利用分治演算法的歸併排序的例子 問題的形式化描述如下 輸入 a是 乙...

演算法 遞迴演算法

遞迴演算法的概念,就是通過不斷地呼叫自身,最終達到解決問題的目的。遞迴有兩個點需要注意 1.要不斷的呼叫自身 2.這個遞迴要有出口,不能成為死迴圈 看下面的例子。很多介紹遞迴演算法的,都會用遞迴來做乙個題目 計算乙個數的階層。例如 計算5的階層,5 5 x 4 x 3 x 2 x 1 用遞迴來實現 ...