2012-08-06 84 views
1

我在ActionScript 3中編寫了一個DXT5圖像讀取器,我需要讀取存儲在較大字節數組中的6個字節中的16位3位值。對於如何高效地閱讀這些內容,我有點不知所措。我用2位代碼做了類似的事情,但奇數會讓事情變得更加困難(至少對我來說)。理想情況下,源字節數組將以6之後的下一個字節的位置結束。從字節數組讀取3位

var values:Vector.<uint> = new Vector.<uint>(16); 
var alpha_bytes:ByteArray = new ByteArray(); 
data.readBytes(alpha_bytes, 0, 6); 

// ?? 

回答

0

好的,所以我想出了一個解決方案 - 不是很優雅,但它的工作原理。基本上我將24位讀入一個短字節和一個字節,然後將它們組合成一個代表24位的uint。然後我使用for循環來提取真實值。

var alpha_16:uint = data.readUnsignedShort(); 
var alpha_8:uint = data.readUnsignedByte(); 

var alpha_1:uint = (alpha_8 << 16) | alpha_16; 

for(j = 0; j < 8; j++){ 
    alpha_values[j] = (alpha_1 & (7 << (3 * j))) >> (3 * j) 
}