前一章面所看到的繪圖示例中,只使用了一些非常簡(jiǎn)單的繪圖指令,前面我們也幾次提到了這個(gè)神秘的"drawing API",但沒(méi)有加以詳細(xì)的解釋。本章我們將學(xué)習(xí)使用 ActionScript 創(chuàng)建視覺(jué)元素,其中包括 ActionScript 的顏色,繪圖 API , ColorTransform 類,濾鏡(filter)和 BitmapData(位圖) 類。在本章的很多地方都會(huì)用到顏色,那么就先來(lái)學(xué)習(xí)第一課吧。
Flash 中的顏色
在 Flash 中,顏色就是一串特殊的數(shù)字,一個(gè)顏色值可以是0到16,777,215中的任意數(shù)值,這就是24位(bit)色彩。也許大家會(huì)問(wèn),為什么有16,777,216(256*256*256)種顏色值,因?yàn)?Flash 使用 RGB 顏色值,意味著每個(gè)顏色都可以由紅(red),綠(green),藍(lán)(blue)三種顏色構(gòu)成。這三種合成色的每一種都是一個(gè)從0到255中的數(shù),所以,對(duì)于每個(gè)紅黃藍(lán)都有256種可能的深度,結(jié)果會(huì)有約1,678萬(wàn)種顏色。
這個(gè)系統(tǒng)之所以叫做24位顏色是因?yàn)橐褂?位(0或1)才能表示256個(gè)數(shù)值。8位乘以3(紅,黃,藍(lán))意味著需要24位才能表示1678萬(wàn)種顏色值。我們馬上還要學(xué)到32位色系統(tǒng),它有額外的8位數(shù)值表示透明度(alpha)。
很難想像一個(gè)值為11,273,634的顏色是什么樣的。因此,開(kāi)發(fā)人員通常采用另一種數(shù)值表示系統(tǒng):十六進(jìn)制。如果大家在 HTML 中使用過(guò)顏色,那么這對(duì)于你來(lái)說(shuō)并不會(huì)陌生,但不管怎樣還是讓我們來(lái)學(xué)習(xí)一下這些基礎(chǔ)知識(shí)吧。
使用十六進(jìn)制表示顏色值
十六進(jìn)制(Hexadecimal,簡(jiǎn)寫 hex),以16為基礎(chǔ),每位數(shù)都是0到15中的任意一個(gè)數(shù),而十進(jìn)制則是以10為基礎(chǔ),每位數(shù)都是0到9中的任意一個(gè)數(shù)。由于沒(méi)有可以表示10到15的數(shù),所以要借用字母表的前六個(gè)字母,A到F,來(lái)表示它們。這樣,每個(gè)16進(jìn)制數(shù)都可以是0到F中的一個(gè)(在 Flash 中,十六進(jìn)制數(shù)不區(qū)分大小寫,使用A到F或a到f均可)。在 HTML 中使用16進(jìn)制數(shù),要加上 # 作為前綴加以標(biāo)識(shí)。與其它語(yǔ)言一樣,在 ActionScript 中,使用0x作為前綴。比如,十六進(jìn)制的 0xA 與十進(jìn)制的10相等,0xF等于15,0x10等于16。在十進(jìn)制中,每一位都是它右邊一位數(shù)的十倍,如243表示為2的100倍,4的10倍,3的1倍。在十六進(jìn)制中,每一位都是它右邊一位數(shù)的十六倍,如0x2B3表示為2的256倍,B(或11)的16倍,3的1倍。 對(duì)于24位來(lái)說(shuō),就等于0xFFFFFF,此外,這6個(gè)十六進(jìn)制數(shù)可以分為三部分。第一部分代表紅色,第二部分代表綠色,最后兩位表示藍(lán)色,被象征性地記為0xRRGGBB。 記住每一個(gè)合成色都可以為0至255(十六進(jìn)制表示:0x00到0xFF)中的值。因此,紅色可以表示為 0xFF0000,表示純紅色,因?yàn)樗木G色為0,藍(lán)色為0。同樣,0x0000FF表示純藍(lán)色。
拿11,273,634為例,將它轉(zhuǎn)換為十六進(jìn)制(稍后為大家介紹一種簡(jiǎn)單的方法),結(jié)果為 0xAC05A2,可以把它分解為 red(紅色) = AC,green(綠色) = 05,blue(藍(lán)色) = A2?梢钥闯鰎ed(紅色)和blue(藍(lán)色)的值比較高,而綠色幾乎沒(méi)有,我們就可以猜到這個(gè)顏色大概為紫色,這是在十進(jìn)制數(shù)中看不出來(lái)的。請(qǐng)注意,在 ActionScript 中,使用哪種進(jìn)制表示都可以,在一個(gè)函數(shù)中使用顏色值既可使用十進(jìn)制又可使用十六進(jìn)制。對(duì)于 Flash 來(lái)說(shuō),11,273,634 和 0xAC05A2 是一個(gè)數(shù),只是對(duì)于可憐的人類來(lái)說(shuō)后面一種表示法更易讀懂。 那么如何在兩種進(jìn)制之間進(jìn)行轉(zhuǎn)換呢,將十六進(jìn)制轉(zhuǎn)換為十進(jìn)制非常容易。只要輸出這個(gè)十六進(jìn)制數(shù)就可以了,trace 函數(shù)會(huì)自動(dòng)將它轉(zhuǎn)換為十進(jìn)制。 trace(0xAC05A2); 將十進(jìn)制轉(zhuǎn)換為十六進(jìn)制要用到 toString(16)函數(shù),如: trace((11273634).toString(16)); 輸出結(jié)果為ac05a2,如果要使用這個(gè)數(shù),不要忘記加上0x。
透明度和32位色
前面提到過(guò),除了24位色以外,還有32位色,多出8位用于表示透明度。就像角度制與弧度制一樣(第三章內(nèi)容),AS 3 在24和32位色的使用上有些混雜。AS 3 的繪圖 API 很大程度上是基于 Flash MX(Flash 6) 建立的,總之,繪圖 API 函數(shù)使用一個(gè)特殊的參數(shù)來(lái)指定透明度,所以還要延用24位色。另外, BitmapData 類,是從 Flash 8 才加入的,并且使用的是32位色彩。如果大家對(duì)某個(gè)函數(shù)使用哪種色彩體系有疑問(wèn)的話,請(qǐng)查看 ActionScript 參考手冊(cè)。
我們可以使用十六進(jìn)制以 0xRRGGBB 這樣的格式來(lái)表示一個(gè)色彩值。同樣,32位的顏色也是如此,以 0xAARRGGBB 這樣的格式來(lái)表示,其中 AA 表示透明度。因此,0xFFFFFFFF 就表示不透明的白色,0x00FFFFFF 表示完全透明的白色,而 0x80FFFFFF 表示近似 50%透明度的白色。
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) 渲染技術(shù) [2]
◎進(jìn)入論壇RIA設(shè)計(jì)與應(yīng)用版塊參加討論
|