2010-03-03 149 views
1

我正在學習getPixel32()以及位圖和位圖數據類。基本上,我想知道如何從十六進制值輸出一個簡單的ARGB蹤跡。另一方面,我的印象是,我認爲/希望是錯誤的,即十六進制值不能產生與RGBA值一樣多的顏色。也許「網絡安全」已經拋棄了我理解使用十六進制值生成顏色的用處或願望。Actionscript 3.0將HEX轉換爲ARGB

回答

3

要提取顏色信息,您必須使用按位運算符。顏色存儲爲0xAARRGGBB,因此您必須提取這些部分。小片段應該完成這項工作:

var hex: uint = 0x00ff00ff; 
var a: int = (hex >>> 0x18) & 0xff; 
var r: int = (hex >>> 0x10) & 0xff; 
var g: int = (hex >>> 0x08) & 0xff; 
var b: int = hex & 0xff; 

trace(a, r, g, b); 

根據您指定RGBA值的方式,答案可能會改變。如果您使用RGBA值(其中每個通道由一個字節指定),則可以使用與十六進制值完全相同的顏色。您的「十六進制值」是一個由4個字節組成的無符號整數。在Flash中也有64位的數字類型,所以每個通道將被表示爲8個字節而不是1個。你可以想象你有更多的精度。但是,可能您的屏幕設置爲「真彩色(32位)」,並且無法顯示多種顏色。你甚至超出雙精度(64位),並使用小數精度,這主要用於財務計算。每個值由128位組成,每個通道爲16個字節。這比使用十六進制表示時多16倍。當然,這是更精確的,但你的顯示器將無法處理它。

附註。您的圖片尺寸也是寬度高度通道*(每通道字節數)。所以如果你使用8位的每個通道一個字節,你已經有足夠的顏色。對於一個大的圖像來說,如果您從每個通道的8位到32位,差異相當大。

具有8位精度的1024x768圖像爲3072kb,而相同的32位圖像在內存中爲12288kb。使用Flash的Number類型,相同的圖像將佔用24576kb。所以你可能更好的保持8位精度,在大多數情況下應該足夠了。

我希望這可以幫助你更好地理解圖像及其結構。

+0

我更喜歡屏蔽我正在使用的通道,a =(十六進制&0xff000000),然後將其移入範圍,>> 24爲a。儘管如此,這是一個很好的方法 – avanderw 2012-01-19 10:00:16