我需要做一个简单的检查,如果一个 dds 文件是有效的格式。我只需要对 dds 文件进行一般检查,因此我不需要检查它是否是 dxt1、dxt5、dx10 等。例如,如果我有一个 png 图像并且我将扩展名重命名为 .dds 则为 dds 格式当然会是错误的,然后我需要告诉用户他正在尝试使用格式错误的 dds 文件。但是,如果我有一个确实具有正确文件格式的 dds,我将不需要做任何进一步的调查,因为我不关心它是什么类型的 dds 文件(此时)。所以我只需要阅读 dds 文件中在所有 dds 文件上都保持不变的部分。我想我可以以某种方式读取 dds 标头和幻数。我必须对 png 文件进行相同的验证,并且我正在读取 png 标题,如下所示:
var png = new byte[] { 0x89, 0x50, 0x4e, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }
using (FileStream fs = new FileStream(fileToCheck, FileMode.Open, FileAccess.Read))
{
if (fs.Length > buffer.Length)
{
fs.Read(buffer, 0, buffer.Length);
fs.Position = (int)fs.Length - endBuffer.Length;
fs.Read(bufferEnd, 0, endBuffer.Length);
}
fs.Close();
}
for (int i = 0; i < png.Length; i++)
{
if (buffer[i] != png[i])
return false;
}
return true;
我正在寻找是否有类似的方法来检查 dds 文件的格式。我是新手,我遇到的问题是知道 dds 文件中的哪些字节对于所有 dds 文件总是相同的(以便我可以检查这些字节以查看 dds 格式是否有效)以及我如何可以通过简单的方式实现代码来检查dds格式。任何帮助将不胜感激。
编辑:所以感谢@NaCl,我已经回答了问题的第一部分。我现在知道 dds 文件中需要哪些部分,但我不知道如何在 dds 文件中找到它。我用十六进制编辑器打开了很多 dds 文件,但我不太擅长逆向工程,所以我不明白我需要检查的字节在哪里,这进一步让我不知道如何实现代码在指定位置搜索字节(我可以使用 png 文件执行此操作,因为我找到了有关该文件的更多文档),因为我不知道该去哪个位置。
如果有人能指出我正确的方向或以其他方式帮助我,我将不胜感激。谢谢。