|
最近逆向了一个游戏,解了其资源.
发现很多 没有文件头的DDS文件. (即前面0x80个字节 1个DWORD 和1个DDSURFACEDESC2 结构).
所以我不知道其图片的长和宽...我手里只有其纹理数据.(我自己可以手动修复..因为长和宽一般是2的倍数..)
但是手动很麻烦... 想用程序批量转换....苦于不知道如何只根据数据 推出其长宽(我不会DX)...
或则能否仅依靠其数据转成bmp格式?
正常dds 文件前面 0x80个字节如下... 两个 00 04 00 00 ,00 04 00 00 (第1行尾)是其长宽
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000000 44 44 53 20 7C 00 00 00 07 10 00 00 00 04 00 00 DDS |...........
00000010 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000040 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 ............ ...
00000050 04 00 00 00 44 58 54 35 00 00 00 00 00 00 00 00 ....DXT5........
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 ................
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
后面跟着就是数据域......
我手里的dds 文件:
没有前面的0x80个字节,只有数据. 最开始的 07 是第7层,0x10 表示第7层0x10个字节
接着 就是 06 00 00 00 ,40 00 00 00 表示第6层,0x40个字节(后面每层字节数是上一层的4倍)
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000000 07 00 00 00 10 00 00 00 FF BC 10 C6 2D 27 02 00 ........?'..
00000010 C6 39 04 21 FB CF 7F 05 06 00 00 00 40 00 00 00 ?.!?.....@...
00000020 FF BD 00 08 00 00 90 07 A6 31 E3 20 0A FB BE F6 ...???.??
00000030 FF A6 02 00 90 EC 02 38 07 52 E3 20 D6 BF 70 67 .??8.R?挚pg
00000040 FF 70 B7 01 00 00 00 00 65 31 E3 20 A8 6C 55 C6 ?....e1??U?
00000050 FF 9F 40 0E 90 00 00 00 E7 41 04 21 7E 5D 03 08 @.?..?.!~]..
转的时候0层的数据放最上面,7层的数据放最下面,再加上文件头就能显示了.(有几个文件比较好猜知道是1024*768直接就猜出来了,但是其他不是)...
大家一定要帮帮忙啊...有没有办法仅根据数据就能知道dds的长和宽,或则只根据数据就能转成bmp.. |
|