筆記 Actionscript的色彩合成與獲取

2022-03-22 01:57:36 字數 2698 閱讀 6887

色彩合成

如何將紅、綠、藍三種顏色值組成乙個有效的顏色值,這是個普遍的問題。假設有三個變數 red,green,blue,每個變數裡面儲存乙個 0 到 255 之間的數。下面是這個公式:

color24 = red << 16 | green << 8 | blue;

加入透明度後,建立乙個32位色彩值,公式如下: 

color32 = alpha << 24 | red << 16 | green << 8 | blue;

這裡用到了兩個位操作符,大家以前可能沒有接觸過。位操作是對二進位制(0或1)進行的操作,對於 24 位色來說,如果把顏色值的每一位都列出來,就會得到一串由 24 個 0 或 1 組成的字串。把十六進製制 0xrrggbb 分解成二進位制後是這樣的:

rrrrrrrrggggggggbbbbbbbb

我們看到有 8 位red,8 位green,8 位blue,也就是說 8 位二進位制數等於 256。 在色彩合成公式中,第乙個位操作符是 << ,是乙個按位左移操作符,該操作是將二進位制數值向左側移動。比如,紅色值(red)為 0xff 或 255,可以由二進位制表示為:11111111將它向左移動 16 位,結果是:

在 24 位色彩中,它表示紅色,轉換為二進位制後為 0xff0000,是純紅色。 下面,假設有乙個綠色值(green)為 0x55(十進位制 85),二進位制表示為:01010101將它向左移動 8 位後,結果為:

這樣一來,這 8 位數完全移動到了綠色值的範圍。 最後,假設乙個藍色值為 0xf3(十進位制 243),二進位制表示為:11110011。因為它們都處在藍色(blue)的範圍,所以不需要再去移動它。這樣我們總共就擁有了三組數: 

111111110000000000000000 000000000101010100000000 000000000000000011110011 

可以簡單地將它們加起來,成為乙個24位數,但是,還有一種更好更快的方法:使用或(or)運算,符號是 | 。它會將兩組數的每個二進位制位進行比較,如果兩個之中有乙個數為1,那麼結果就為 1,如果兩個數都為 0,那麼結果就為 0。可以使用或(or)運算將 red, green, blue 的值相加起來,也可以這麼說「如果這個數或這個數或這個數中有乙個數等於1,那麼結果就為1」。最終結果為:

111111110101010111110011 

將這個數轉換為十六進製制就等於 0xff55f3 。當然,我們無法看到這些二進位制位,也不會與這些 0 或 1 打交道,只需要學會這種寫法: 

var color24:number = 0xff << 16 | 0x55 << 8 | 0xf3;

十進位制寫法是: 

var color24:number = 255 << 16 | 85 << 8 | 243;

flash 並不關心人們使用的是十進位制數還是十六進製制數。 同樣,還可以將 red, green, blue 的值全部轉換為十六進製制的字串,然後將它們連線成一條很長的字串,最後再把它們轉換為十六進製制數。但是,如果這樣做的話會很麻煩,55而且使用字串操作會非常慢。相反,使用二進位制操作是 actionscript 中最快的運算,因為它們屬於低階運算。 對於 32 位數,其實道理也是一樣的,加入 8 位 alpha(透明度)通道並將其向左移 24 位。例如,有一組32位數為0xffff55f3,將 alpha 值向左移動 24 位,結果如下: 

11111111111111110101010111110011 

前8位數表示透明度,後面的 red, green, blue 值與前面的一樣。

獲取顏色值

假如有這樣乙個數 0xff55f3,要從中提取 red, green, blue 的值。下面請看公式,首先是 24 位色彩:

red = color24 >> 16;

green = color24 >> 8 & 0xff;

blue = color24 & 0xff;

將顏色值向右移動 16 位,結果如下: 

或是0xff(255)對於 green,向右移動 8 位,結果如下: 

這裡已經得出了 blue 的值,但是 red 值還留在一旁。這裡就是要使用與(and)操作符的地方,與(or)操作符相同,都是對兩組數值的比較,可以這樣解釋「兩個數相比較,如果兩個都是1那麼結果就為 1,如果其中有乙個為 0,那麼結果就為 0」。我們把它與 0xff 進行比較: 

1111111101010101 0000000011111111

因為所有的 red 位的數字都與0相比較,所以它們的結果均為 0,只有當兩個數都為1時結果才為 1,所以結果如下: 

0000000001010101 

對於 blue 則不需要執行右移操作,只需要讓它和 0xff 執行與(and)操作即可。對於 32 位色彩,方法也是相同的,只不過需要一點小小的改動: 

alpha = color32 >> 24;

red = color32 >> 16 & 0xff;

green = color32 >> 8 & 0xff;

blue = color32 & 0xff;

Action script學習筆記。

action script基本語法 1 建立變數 var 變數名 型別 var a int 1 2.類的概念 action script中的類和其他物件導向中的類差不多,今天看到乙個基本的類object,很是通用。3.super 語句 呼叫方法或建構函式的超類或父版本。用法 super arg1,a...

學ActionScript阿旭筆記

今天在做部落格系統,用到頭像上傳功能,考慮使用flash實現。actionscript3不太收悉,所以學習中寫下幾筆日記。1 as指令碼檔案和fla檔案關聯 actionscript文件,在fla目錄下的as指令碼檔案會自動被載入的。也可以在選單檔案 actionscript設定 新增新路徑,關聯更...

ActionScript中的is型別和as型別

is 運算子 is 運算子是 actionscript 3.0 中的新增運算子,它可用來測試變數或表示式是否為給定資料型別的成員。在早期的 actionscript 版本中,此功能由 instanceof 運算子提供。但在actionscript 3.0 中,不應使用 instanceof 運算子來...