DXT3(BC2)压缩格式alpha数据

DXT3 (BC2) compression format alpha data

本文关键字:格式 alpha 数据 压缩 BC2 DXT3      更新时间:2023-10-16

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

这意味着,由于存储的alpha值只能为0-15,因此实际alpha数据的计算如下:

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

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

这是此规范所说的:

在块中的位置(x,y)处的texel的alpha组件为
由alpha(x,y)/15给出。

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

由于255可以排15,因此将转换为[0 .. 255]的转换可能更容易

uint8_t alpha = bitvalue * 17;

现在,更明显的是,发生的事情是通常的"重复"映射(例如CSS简短颜色代码),它可以很好地扩展输出值(允许编码最小值和最大值,并且可以编码最大值和最大值在所有值之间都有相等的步骤)。