2010-03-03 155 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