1

私は ActionScript 3 で DXT5 イメージ リーダーを作成しています。より大きな bytearray の 6 バイトに格納された 16 個の 3 ビット値を読み取る必要があります。これを効率的に読み取る方法については、少し途方に暮れています。私は2ビットコードで似たようなことをしましたが、奇数はそれをより困難にします(少なくとも私にとっては)。理想的には、ソース bytearray は、問題の 6 の後の次のバイトまでの位置で終了します。

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

// ??
4

1 に答える 1

0

わかりましたので、解決策を見つけました-あまりエレガントではありませんが、機能します。基本的には、24 ビットを short と byte に読み取り、それらを一緒に 24 ビットを表す uint に OR します。次に、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 )
}
于 2012-08-06T06:35:08.967 に答える