2011-06-17 28 views
0

我剛剛使用ByteArray,並試圖使用As3中的ByteArray解析來自.ase(Adobe Swatch Exchange)的十六進制顏色值。我可以使用十六進制編輯器查看十六進制值的位置,但不知道使用哪種方法從那裏解析十六進制值。以下是從十六進制編輯器複製的值。 2種顏色值爲#ffffff和#cdcdcd:在AS3中翻譯ByteArray中的十六進制值

ASEF ........¿.......... $ ...#。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文件中所有顏色的方法的建議。在此先感謝幫助我完成此操作!

回答

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文件格式。

如果要存儲的值作爲RGB整數,由Flash可用,這樣做:

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

上面的代碼結合的各個顏色的字節爲一個32位的int(注意,在高8位被保留爲0.有時Flash使用高8位的alpha,有時不使用。)