我正在研究getPixel32()以及Bitmap和Bitmap Data类。基本上,我想知道如何从十六进制值输出简单的ARGB跟踪。
除此之外,我的印象是,我认为/希望是错误的,十六进制值不能产生与RGBA值一样多的颜色。或许“网络安全”让我理解使用十六进制值产生颜色的用处或愿望。
答案 0 :(得分: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中还有Number类型,它由64位组成,因此每个通道将表示为8字节而不是1字节。你可以想象你有更多的精确度。但是,您的屏幕可能设置为“真彩色(32位)”,并且无法显示许多颜色。您甚至超出了双精度(64位)并使用小数精度,这主要用于财务计算。每个值由128位组成,每个通道产生16个字节。这比使用十六进制表示时多16倍。当然,这更精确,但你的显示器将无法处理它。
旁注。您的图像大小也是宽度高度通道*(每个通道的字节数)。因此,如果每个通道使用8位的一个字节,则可以获得足够的颜色。对于大图像,如果从每个通道的8位变为32位,则差异非常大。
具有8位精度的1024x768图像为3072kb,而相同的32位图像在内存中为12288kb。使用Flash的Number类型,相同的图像将占用24576kb。所以你最好保持8位精度,这在大多数情况下应该足够了。
我希望这有助于您更好地了解图像及其结构。