【问题标题】:Actionscript 3.0 Translating HEX to ARGBActionscript 3.0 将 HEX 转换为 ARGB
【发布时间】:2011-01-23 02:35:12
【问题描述】:

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

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

【问题讨论】:

    标签: actionscript-3 rgb hex argb


    【解决方案1】:

    要提取颜色信息,您必须使用位运算符。颜色像 0xAARRGGBB 一样存储,因此您必须提取这些部分。小 sn-p 应该可以完成这项工作:

    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 位精度,这在大多数情况下应该足够了。

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

    【讨论】:

    • 我更喜欢先屏蔽我正在使用的通道,a = (hex & 0xff000000),然后将其转移到范围内,>> 24 for a。这是一种很好的方法
    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2012-02-04
    相关资源
    最近更新 更多