Graphics 在DDS文件中,是否可以检测具有0/1 alpha位的纹理?

Graphics 在DDS文件中,是否可以检测具有0/1 alpha位的纹理?,graphics,directx,directdraw,dds-format,Graphics,Directx,Directdraw,Dds Format,在我的引擎中,我需要能够检测具有0 alpha纹理的DXT1纹理(例如,窗框的剪切)。这对于我自己压缩的纹理来说很容易,但我不确定已经压缩的纹理 有没有一种简单的方法可以从头部判断DDS图像是否包含alpha?据我所知,没有方法从头部判断。有一个DDPF_ALPHAPIXELS标志,但我不认为它会根据像素数据中的内容来设置。您需要解析DXT1块,并查找其中包含0 alpha的颜色(我想一定要检查该颜色是否也在块中使用)。我同意公认的答案。通过使用“squish”库为您解压块,您的工作可能会变得简

在我的引擎中,我需要能够检测具有0 alpha纹理的DXT1纹理(例如,窗框的剪切)。这对于我自己压缩的纹理来说很容易,但我不确定已经压缩的纹理


有没有一种简单的方法可以从头部判断DDS图像是否包含alpha?

据我所知,没有方法从头部判断。有一个DDPF_ALPHAPIXELS标志,但我不认为它会根据像素数据中的内容来设置。您需要解析DXT1块,并查找其中包含0 alpha的颜色(我想一定要检查该颜色是否也在块中使用)。

我同意公认的答案。通过使用“squish”库为您解压块,您的工作可能会变得简单一些


DDS对于DXT(或BTC)数据来说是一个非常糟糕的包装器。标题对您没有帮助。
普通原始DXT1没有任何alpha。我相信现在的d3d确实用alpha解码DXT1。每个DXT1块都是这样的:color1(16位)color2(16位)索引(32位)。如果16位color1值小于color2(只是一个uint16比较,没有什么特别之处!),则块没有alpha。否则,它会。所以要回答你的问题:跳过标题,读16位a,读16位b,如果a>b有alpha。否则跳过32位并重复,直到eof。其他DXT格式(如DXT5)始终具有alpha。人们很少依赖DXT1 alpha技巧,因为某些硬件(英特尔..)不可靠地支持它。

否,DDS标头仅对未压缩的图像使用alpha标志。我同样需要弄清楚DXT1图像是否使用了1位alpha,经过长时间的搜索,我在这里找到了这个参考:

基本上如果颜色为0