在HEX中手工导出图片,虽然是可行的,但如果图片太多的话,任谁都会失去动手的兴趣。
特贴出我在研究DAT之时为了验证思路所写的宏。只是后来真正用语言写的时候才发现好难好难,连个对话框什么的都要搞半天。也许是我太笨了吧。
所需软件:Microsoft Excel for Windows。
大唐GX10N备份文件DAT一个。
打开EXCEL,新建一个表,如下:
其中位置1为图片在DAT文件中第一个存储空间的起点位置,长度1为第一个存储空间的有效长度,即11273-65(11+文件名长度+12,每一个汉字和字母都占用两个字节)。
位置2为图片在DAT文件中第二个存储空间的起点位置,长度2为图片剩余的长度。可由文件总长-第一段的长度得出。
位置3和长度3也类似。
只是355×288的图片只有17K左右,不应该占用到3个存储空间。
把你的DAT文件中的文件信息填上去。OK。
再点工具→宏→Visual Basic编辑器。
在出现的窗口中输入如下代码。
Dim br() As Byte
Sub Writefile()
Sheet2.Range("A2").Select
Close #1
Open "c:\abc.dat" For Binary access Read As #1 '我是把DAT复制到C盘下面,改名为abc.dat,你如果想使用你的文件名,请修改此处斜体部分
Do
If ActiveCell.Offset(0, 0).Range("A1").Value = "" Then
Exit Do'当前行没有文件信息时,则自动退出程序。所以中间不要空行
End If
Close #2
Open "c:\" & ActiveCell.Offset(0, 0).Range("A1").Value For Binary Access Write As #2
ReDim br(1 To ActiveCell.Offset(0, 0).Range("e1")) As Byte
Seek 1, ActiveCell.Offset(0, 0).Range("c1").Value + ActiveCell.Offset(0, 0).Range("d1").Value + 1
Get #1, , br
Put #2, , br
If ActiveCell.Offset(0, 0).Range("F1").Value <> 0 Then
ReDim br(1 To ActiveCell.Offset(0, 0).Range("g1"))
Seek 1, ActiveCell.Offset(0, 0).Range("F1").Value + 10
Get 1, , br
Put 2, , br
If ActiveCell.Offset(0, 0).Range("H1").Value <> 0 Then
ReDim br(1 To ActiveCell.Offset(0, 0).Range("I1"))
Seek 1, ActiveCell.Offset(0, 0).Range("H1").Value + 10
Get 1, , br
Put 2, , br
End If
End If
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
Close 1, 2
End Sub
关掉Visual Basic编辑器。
在当前页面按下Alt+F8(或是工具→宏→宏)。
选中WriteFile,点执行。
然后点开我的电脑→C盘,可以看到我们解压出来的图片。
用这种方法解压出来的图片完整无损,而且可以直接观看,不需要用ACDSEE另存。