从AS3中的ByteArray转换十六进制值

时间:2011-06-17 23:21:56

标签: actionscript-3 bytearray hex

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

亚欧基金........¿.......... $ ...#。ffffff.RGB.?Ä..?Ä..?Ä....¿.. ........ $ ...#。cd0.0.cd.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文件中所有颜色的方法的建议。在此先感谢帮助我完成这项工作!

1 个答案:

答案 0 :(得分:2)

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,有时不用。)