1

我正在研究 getPixel32() 以及 Bitmap 和 Bitmap Data 类。基本上,我想知道如何从十六进制值输出 ARGB 的简单轨迹。

顺便说一句,我的印象是,我假设/希望是错误的,十六进制值不能产生与 RGBA 值一样多的颜色。也许“网络安全”让我无法理解使用十六进制值产生的颜色的有用性或愿望。

4

1 回答 1

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 位组成的 Number 类型,因此每个通道将表示为 8 字节而不是一个。你可以想象你有更高的精度。但是,您的屏幕可能设置为“真彩色(32 位)”并且无法显示那么多颜色。您甚至可以超越双精度(64 位)并使用十进制精度,这主要用于财务计算。每个值由 128 位组成,每个通道占 16 个字节。这是使用十六进制表示时的 16 倍。

一个旁注。您的图像大小也是宽度高度通道*(每个通道的字节数)。因此,如果您每个通道使用一个 8 位字节,您就可以获得足够的颜色。对于大图像,如果每个通道从 8 位变为 32 位,差异会非常大。

具有 8 位精度的 1024x768 图像在内存中为 3072kb,而相同的 32 位图像在内存中为 12288kb。使用 Flash 的数字类型时,相同的图像将占用 24576kb。所以你可能最好保持 8 位精度,这在大多数情况下应该足够了。

我希望这会有所帮助,并且您现在对图像及其结构有了更好的理解。

于 2010-03-03T09:11:50.940 回答