返回“Flash基礎理論課 - 目錄”
前一章面所看到的繪圖樣本中,只使用了一些非常簡單的繪圖指令,前面我們也幾次提到了這個神秘的"drawing API",但沒有加以詳細的解釋。本章我們將學習使用 ActionScript 建立視覺元素,其中包括 ActionScript的顏色,繪圖 API ,ColorTransform類,濾鏡(filter)和 BitmapData(位元影像)類。在本章的很多地方都會用到顏色,那麼就先來學習第一課吧。
Flash中的顏色
在Flash中,顏色就是一串特殊的數字,一個顏色值可以是0 到 16,777,215中的任意數值,這就是24位(bit)色彩。也許大家會問,為什麼有 16,777,216 (256 * 256 * 256)種顏色值,因為Flash 使用 RGB 顏色值,意味著每個顏色都可以由紅(red),綠(green),藍(blue)三種顏色構成。這三種合成色的每一種都是一個從0 到 255中的數,所以,對於每個紅黃藍都有 256 種可能的深度,結果會有約 1,678 萬種顏色。
這個系統之所以叫做 24位顏色是因為要使用8位(0或1)才能表示 256 個數值。8位乘以 3 (紅,黃,藍)意味著需要24位才能表示 1678 萬種顏色值。我們馬上還要學到32位色系統,它有額外的8位元值表示透明度(alpha)。
很難想像一個值為11,273,634的顏色是什麼樣的。因此,開發人員通常採用另一種數值表示系統:十六進位。如果大家在HTML中使用過顏色,那麼這對於你來說並不會陌生,但不管怎樣還是讓我們來學習一下這些基礎知識吧。
使用十六進位表示顏色值
十六進位(Hexadecimal,簡寫 hex),以 16 為基礎,每位元都是0 到 15中的任意一個數,而十進位則是以 10 為基礎,每位元都是0 到 9中的任意一個數。由於沒有可以表示 10 到 15的數,所以要借用字母表的前六個字母, A 到 F,來表示它們。這樣,每個16進位數都可以是0 到 F中的一個(在Flash中,十六進位數不區分大小寫,使用A到F或a到f均可)。在HTML中使用 16 進位數,要加上 # 作為首碼加以標識。與其它語言一樣,在ActionScript中,使用 0x 作為首碼。比如,十六進位的0xA 與十進位的10相等,0xF等於15,0x10等於16。在十進位中,每一位都是它右邊一位元的十倍,如243表示為2的100倍,4的10倍,3的1倍。在十六進位中,每一位都是它右邊一位元的十六倍,如0x2B3表示為2的256倍,B(或11)的16倍,3的1倍。
對於24位來說,就等於0xFFFFFF,此外,這 6 個十六進位數可以分為三部分。第一部分代表紅色,第二部分代表綠色,最後兩位表示藍色,被象徵性地記為0xRRGGBB。
記住每一個合成色都可以為0 至 255(十六進位表示:0x00 到 0xFF)中的值。因此,紅色可以表示為0xFF0000,表示純紅色,因為它的綠色為0,藍色為0。同樣,0x0000FF表示純藍色。
拿 11,273,634 為例,將它轉換為十六進位(稍後為大家介紹一種簡單的方法),結果為0xAC05A2,可以把它分解為red(紅色) = AC,green(綠色) = 05,blue(藍色) = A2。可以看出 red(紅色)和 blue(藍色)的值比較高,而綠色幾乎沒有,我們就可以猜到這個顏色大概為紫色,這是在十進位數中看不出來的。請注意,在ActionScript中,使用哪種進位表示都可以,在一個函數中使用顏色值既可使用十進位又可使用十六進位。對於Flash來說,11,273,634和0xAC05A2 是一個數,只是對於可憐的人類來說後面一種標記法更易讀懂。
那麼如何在兩種進位之間進行轉換呢,將十六進位轉換為十進位非常容易。只要輸出這個十六進位數就可以了,trace 函數會自動將它轉換為十進位。
trace(0xAC05A2);
將十進位轉換為十六進位要用到 toString(16)函數,如:
trace((11273634).toString(16));
輸出結果為ac05a2,如果要使用這個數,不要忘記加上0x。
透明度和32位色
前面提到過,除了 24位色以外,還有 32位色,多出 8位用於表示透明度。就像角度制與弧度制一樣(第三章內容),AS 3 在24和32位色的使用上有些混雜。AS 3的繪圖 API 很大程度上是基於Flash MX(Flash 6) 建立的,總之,繪圖 API 函數使用一個特殊的參數來指定透明度,所以還要延用 24位色。另外, BitmapData類,是從Flash 8才加入的,並且使用的是32位色彩。如果大家對某個函數使用哪種色彩體系有疑問的話,請查看 ActionScript 參考手冊。
我們可以使用十六進位以 0xRRGGBB 這樣的格式來表示一個色彩值。同樣,32位的顏色也是如此,以 0xAARRGGBB 這樣的格式來表示,其中 AA表示透明度。因此,0xFFFFFFFF 就表示不透明的白色,0x00FFFFFF表示完全透明的白色,而 0x80FFFFFF表示近似 50%透明度的白色。