通過(guò)前幾篇教程,相信大家對(duì)于RGB顏色方面的編程應(yīng)該已經(jīng)是得心應(yīng)手了吧?還有一個(gè)方面我們沒(méi)有涉及,那就是:顏色疊加。等這一篇寫完,我想我的這個(gè)RGB教程也該結(jié)束了,因?yàn)槲叶亲永锟删椭挥羞@么點(diǎn)東西了。
這個(gè)色光疊加部分,更多的是一種想法,連算法都算不上。因?yàn)檫@一部分連可以copy了直接用的代碼都沒(méi)有,只有一個(gè)swf文件,還是為了演示用的,不過(guò)我想這個(gè)swf里模仿photoshop的取色器大概還是有一點(diǎn)意思的,因?yàn)檫@不是本節(jié)的重點(diǎn),大家還是自己分析源碼吧,看過(guò)上一節(jié)和這一節(jié)后,應(yīng)該不難理解!
言歸正傳,我們都知道可以用RGB的3色值來(lái)表示一個(gè)顏色。但是這并不是說(shuō)我們?cè)趯?shí)際中看到的眼色就是由3原色光疊加組成的(計(jì)算機(jī)屏幕自然如此),而是說(shuō)這種光的顏色和對(duì)應(yīng)的3色光疊加對(duì)人眼的刺激是相同的,也就可以等效起來(lái)了。因此或許如果對(duì)于別的生物,比如貓,因?yàn)檠劬?gòu)造的不同,我們看來(lái)屏幕上和實(shí)物完全相同,貓看起來(lái)卻不一樣。這一部分在學(xué)科劃分上屬于色度學(xué)和心理學(xué)(交叉),大家有興趣可以自己找資料看一看。
說(shuō)這些廢話是為了分清楚一件事情,光疊加和色(比如水彩)疊加。紅光加上綠光看起來(lái)是黃光,但是紅墨水摻上綠墨水可就差不多是黑的了。我們?cè)谟?jì)算機(jī)上所作的,都是光疊加的內(nèi)容。
如果是一束ff0000的光和一束00ff00的光線疊加,是什么顏色?不錯(cuò),是黃色:0xffff00。這也種簡(jiǎn)單的疊加方法其實(shí)也適合于更復(fù)雜的情況。
看到這里大家可能有一個(gè)擔(dān)心,如果一種色光的強(qiáng)度超過(guò)255怎么辦?很簡(jiǎn)單,超過(guò)255就把他設(shè)置為255,可不要進(jìn)位!呵呵,開(kāi)個(gè)玩笑。其實(shí),這個(gè)擔(dān)心是多余的,我們能證明,實(shí)際的情況中,永遠(yuǎn)也不會(huì)出現(xiàn)某一色光強(qiáng)度超過(guò)255的情況,最高等于255。
我覺(jué)得色光疊加最核心的問(wèn)題是:如果是一個(gè)半透明的東西覆蓋在另一個(gè)物體上,顏色怎么計(jì)算?
這可能是很多網(wǎng)友最頭疼的問(wèn)題之一,我也是和cnmusa討論這個(gè)到問(wèn)題才開(kāi)始深入的思考色光疊加問(wèn)題的。為簡(jiǎn)單考慮,我們先考慮整塊的色塊。一個(gè)色塊的alpha值是30,意味著什么?就是說(shuō)他本身的顏色我們可以看到30%,有70%(1-30%)的底色可以透過(guò)它射上來(lái)。是不是這個(gè)樣子的呢?我們來(lái)做一下驗(yàn)證,看下面這個(gè)flash。
頁(yè)面:點(diǎn)這兒參觀
源代碼(34K): colortest5.zip
在這個(gè)flash,你可以自己選擇底色、覆蓋層顏色、覆蓋層透明度,然后看看我根據(jù)剛才那個(gè)原理預(yù)測(cè)的顏色是否和實(shí)際顏色相同。因?yàn)橛昧撕芏郙ath.floor(),肯定有誤差,但是到目前我自己還沒(méi)發(fā)現(xiàn)誤差很大的情況。基本上可以證明,我關(guān)于半透明覆蓋的猜想是正確的。
那現(xiàn)在我們可以得出計(jì)算公式了: 疊加色r=覆蓋色r*覆蓋alpha+底色r*(1-覆蓋色alpha); 綠和藍(lán)也是如此,然后再3色組合起來(lái)。
在我的這些flash文件里,rgb都是自己定義的,開(kāi)始就是分立的。如果不是這樣,那我們?nèi)绻趺吹玫揭粋(gè)諸如0xf456c7這樣的顏色代碼的rgb分立值?很簡(jiǎn)單: color=0xf456c7; r=(color&0xff0000)>>16; g=(color&0x00ff00)>>8; b=color&0x0000ff;
如果大家不明白,用下面這個(gè)也是一樣的: color = 0x666666; r = Math.floor(color/65536); g = Math.floor((color-65536*r)/256); b = color-65536*r-256*g;
是不是很簡(jiǎn)單?:)
色光疊加寫完了,我的這個(gè)《RGB顏色action自定義教程》也就算是可以告一段落了,寫的不好,占用了大家很多的寶貴時(shí)間來(lái)都讀、看,甚至是替我改錯(cuò),真是非常感謝。其中特別感謝desigm、cnmusa兩位網(wǎng)友。:D
希望大家對(duì)本教程的各種錯(cuò)誤、不足提出意見(jiàn),我將盡力將它修改完善。我也將繼續(xù)就網(wǎng)友提出的各種問(wèn)題在論壇為大家作出解答,謝謝大家。:D
出處:藍(lán)色理想
責(zé)任編輯:藍(lán)色
上一頁(yè) RGB顏色action自定義教程 — 顏色漸變篇 下一頁(yè)
◎進(jìn)入論壇Flash專欄版塊參加討論
|