1

我正在用 ActionScript 3 编写 DXT5 图像阅读器,我需要读取存储在更大字节数组中的 6 个字节中的 16 个 3 位值。我对如何有效地阅读它有点茫然。我用 2 位代码做了类似的事情,但是奇数使它变得更加困难(至少对我来说)。理想情况下,源字节数组将以所讨论的 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 位读入一个短字节和一个字节,然后将它们组合成一个 uint,然后代表 24 位。然后我使用 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 回答