在ClanLib中使用blend func

2021-04-12 15:59:18 字數 2213 閱讀 8826

本文是對blend func完全沒有認識的人寫的,就好象一天前的我一樣。

廢話我就留到後面才說吧。在clanlib庫中的cl_su***ce與cl_sprite中都會有

這個函式:

void set_blend_func(cl_blendfunc src, cl_blendfunc dest);
其cl_blendfun可以在源**是看到定義,如下:

enum cl_blendfunc

;blend func是乙個象素運算,

下面是blend func的運算公式:

rb = (rs x sr) + (rd x dr)

gb = (gs x sg) + (gd x dg)

bb = (bs x sb) + (bd x db)

ab = (as x sa) +(ad x da)

「x」 表示乘

「+」 表示加

rgba 表示的是rgb象素顏色再加上alpha透明通道

小寫「s」 表示源 (source)

小寫「d」 表示目標 (destination)

小寫」c」 應該是常量的意思吧,不過目前不知怎麼用。

小寫」f」 不知道什麼意思,不過唯一使用的地方有等價的式子:min(as, 1 - ad)

大寫字母「s」和「d」是(源和目標的) 混合因子

這裡面所有值都為0 … 1

rb gb bb ab 表示最終運算後的象素值。

例項應用:

使用alpha值

一般我們乙個cl_su***ce在draw的時候,什麼都不設定,就能夠使用透明象素。

那麼我麼什麼都不設定就相當於:

set_blend_func (blend_src_alpha, blend_one_minus_src_alpha);

blend_src_alpha 為(as, as, as, as)

blend_one_minus_src_alpha 為(1, 1, 1, 1) - (as, as, as, as)

那麼我們公式就可以寫成

rb = (rs x

as) + (rd x

(1-as))

gb = (gs x

as) + (gd x

(1-as))

bb = (bs x

as) + (bd x

(1-as))

ab = (as x

as) + (ad x

(1-as))

這樣,當as為0時

rb = rd,gb = gd, bb=bd, ab=1 這樣透明效果也就實現了。

clanlib中的canvas例子

在example中的canvas中的例子中使用乙個圖象把目標圖象中給掏空了。

其中關鍵**:

// set the cutter su***ce to extract instead of replace colours

cutter.set_blend_func(blend_zero, blend_one_minus_src_alpha);

cutter.draw(cl_mouse::get_x(), cl_mouse::get_y(), canvas_ground->get_gc());

// set cutter back to normal (for showing the mousecursor)

cutter.set_blend_func(blend_src_alpha, blend_one_minus_src_alpha);

其中blend_zero

為 (0, 0, 0, 0)

blend_one_minus_src_alpha  為 (1, 1, 1, 1) - (as, as, as, as)

那麼我們用公式就可以寫成

rb = (rs x

0) +  (rd x

(1-as))

gb = (gs x

0) +  (gd x

(1-as))

bb = (bs x

0) +  (bd x

(1-as))

ab = (as x

0) +  (ad x

(1-as))

當該as 為 0時,ab = ad 。當as 為 1時, ad = 0。 這樣最終就實現了掏空的畫面。

在中使用SQLDMO

曾幾何時,夥伴們為的公升級傷透了腦筋.往往程式的公升級趕不上資料庫的公升級 版本控制的好,這也許不是什麼問題,但對於很大一部分中國公司來說這是無法避免的 而有些n久以前的資料庫要使用新程式的時候,資料庫的公升級簡直就是無從下手.所以對比資料庫公升級的緊要性就逐漸的凸現出來.對於表和字段的公升級按道理...

在MFC中使用Tab Control

說實話,我剛開始看見tab control的時候,覺得很簡單。哪知道用了一下,才發現自己錯了。要用好它,還是需要一些技巧的。經過網上搜尋資料,以及我自己的摸索,把一些要點記錄在這裡。tab control的執行效果有點像property sheet,但兩者還是有一些區別。我的理解就是property...

在exoplatform中使用Tomcat的資料來源

首先在你的context裡面配置資料庫 1這是乙個訪問hypersonic的例子 factory org.apache.commons.dbcp.basicdatasourcefactory maxactive 10maxidle 10maxwait 50000 username sapasswor...