【问题标题】:translating hex values from ByteArray in AS3在 AS3 中从 ByteArray 转换十六进制值
【发布时间】:2011-06-17 23:21:55
【问题描述】:

我是使用 ByteArray 的新手,我正在尝试使用 AS3 中的 ByteArray 解析来自 .ase (Adobe Swatch Exchange) 的十六进制颜色值。我可以使用十六进制编辑器查看十六进制值的位置,但不知道使用哪种方法从那里解析十六进制值。以下是从十六进制编辑器复制的值。 2个颜色值是#ffffff和#cdcdcd:

ASEF........¿........$...#.f.f.f.f.f.f..RGB.?Ä..?Ä..?Ä..¿.. ........$...#.c.d.0.0.c.d..RGB.?MÕŒ....?MÕŒ

我最初尝试获得第一种颜色的尝试很弱,但我被困在这里:

    var byteA:ByteArray = _fr.data;
    byteA.position=29;
    var tb:ByteArray = new ByteArray()  
    var tA:Array= new Array(); //temp array
    byteA.readBytes(tb,0,11);
    trace("TB "+ tb[0]+":" +tb.toString())

有人可以告诉我如何解析颜色值,以便将其添加到临时数组 tA 中吗?作为奖励答案,由于样本中可以有多种颜色,因此非常感谢有关解析给定 .ase 文件中所有颜色的方法的建议。在此先感谢您帮助我度过难关!

【问题讨论】:

    标签: actionscript-3 bytearray hex


    【解决方案1】:

    ASEF 使用 RGB 定义颜色,假设每种颜色为 8 位(称为一个字节)。那是 24 位信息。不幸的是,Flash 的 ByteArray 没有一种只能读取 24 位的方法。因此,我们将单独读取每个字节,然后将它们组合起来。

    var byteArray:ByteArray = _fr.data;
    //Skip past the garbage that isn't the color.
    for (var index:int = 0; index < numberOfBytesUntilFirstColor)
    {
      byteArray.readByte();
    }
    var redValue:int = byteArray.readByte();
    var greenValue:int = byteArray.readByte();
    var blueValue:int = byteArray.readByte();
    

    我让你计算 numberOfBytesUntilFirstColor,因为我不熟悉 ASE 文件格式。

    如果要将值存储为可供 Flash 使用的 RGB 整数,请执行以下操作:

    var color:int = redValue;
    color = color << 8;
    color = color | greenValue;
    color = color << 8;
    color = color | blueValue;
    

    以上代码将各个颜色字节组合成一个 32 位 int(注意,高 8 位保留为 0。有时 Flash 使用高 8 位作为 alpha,有时不使用。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多