我试图从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;这是对的,还是我看错了?
发布于 2016-12-06 15:23:17
本规范似乎就是这么说的:
块中位置(x,y)处的texel的alpha组件是 α(x,y) / 15。
因为结果应该是0 ..1,而不是0。255。
由于255可以被15除,所以将转换为0可能更容易一些。255作为
uint8_t alpha = bitvalue * 17;现在更明显的是,正在进行的是通常的“复制”映射(就像CSS短颜色代码一样),它提供了一个很好的输出值的扩展(允许对最小值和最大值进行编码,并且在所有值之间具有相同的步骤)。
https://stackoverflow.com/questions/40994977
复制相似问题