DXT3(BC2)压缩格式alpha数据
DXT3 (BC2) compression format alpha data
我正在尝试从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简短颜色代码),它可以很好地扩展输出值(允许编码最小值和最大值,并且可以编码最大值和最大值在所有值之间都有相等的步骤)。
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 将"打开的CV图像"中的"颜色"转换为整数格式
- TDateTime格式在C++Builder中不会更改
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 检查不带转换的扫描格式
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 是否可以从格式字符串中检索"width"
- clang格式:宏的缩进
- clang格式:禁用排序包含
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 将RGB图像保存为PPM格式
- 询问在设计我的手臂模拟器功能表示格式1
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 如何将strftime中的格式错误作为异常捕获
- 将CHW格式的浮点向量转换为cv::Mat
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 如何以叮当格式设置评论的行长?
- OpenGL:是否可能具有16位内部格式,类似于亮度 alpha
- DXT3(BC2)压缩格式alpha数据