本文是對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...