我正在解压缩用DXT5压缩的图像。根据描述,每个16字节的块以2字节的alpha数据开始。如果我在十六进制编辑器中查看我的文件,我会发现90%的图像的alpha值小于0.04(文件中的值<10),情况并非如此。
如果我使用OpenGL渲染图像并让glCompressedTexImage完成工作,它看起来没问题。使用我的代码,图像是透明的,正如我对那些小的alpha值所期望的那样。我用来生成alpha值的代码如下:
byte alpha1 = reader.ReadByte();
byte alpha2 = reader.ReadByte();
uint[] alphaValues = new uint[8]
{
alpha1,
alpha2,
0, 0, 0, 0, 0, 0
};
if (alpha1 > alpha2)
{
for (int i = 0; i < 6; ++i)
{
byte value = (byte)(((6.0f - i) * alpha1 + (1.0f + i) * alpha2) / 7.0f);
alphaValues[i + 2] = value;
}
}
else
{
for (int i = 0; i < 4; ++i)
{
byte value = (byte)(((4.0f - i) * alpha1 + (1.0f + i) * alpha2) / 5.0f);
alphaValues[i + 2] = value;
}
alphaValues[6] = 0;
alphaValues[7] = 255;
}
alpha1和alpha2通常是相同的(值类似于8或3或9,但图像中的最大alpha值为96)。
然而颜色还可以。如果我渲染没有alpha值的图像,它看起来很完美。启用alpha - &gt;透明的。