2016-12-06 175 views
0

我试图从dds文件读取图像信息。我设法使DXT1和DXT5格式正常工作,但是我有一个关于DXT3格式的alpha数据的问题(也称为BC2)。 查看压缩的BC2 block的布局时,它显示16像素块的阿尔法数据存储在数据的前8个字节中,每个值占用4位。DXT3(BC2)压缩格式alpha数据

这是否意味着,由于存储alpha值只能是0-15,实际阿尔法数据的计算方法如下:

unsigned char bitvalue = GetAlphaBitValue(); // assume this works and gets the 4-bit value i am looking for 
unsigned char alpha = (bitvalue/15.0f) * 255; 

这是正确的,还是我看着它错了吗?

回答

0

这就是this specification似乎是说:

在块中的位置(x,y)处的纹理像素的阿尔法分量是
由α(X,Y)给定/ 15

因为结果应该是[0 .. 1],而不是[0 .. 255]。

由于255是由15整除,它可能更容易想到的改造到[0 .. 255]作为

uint8_t alpha = bitvalue * 17; 

现在更明显,这是怎么回事是通常的“复制”映射(就像CSS短颜色代码一样),可以很好地扩展输出值(允许编码最小值和最大值,并且在所有值之间具有相同的步长)。