半自动的步枪--Excel宏--GX10N图片导出程序
在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,你如果想使用你的文件名,请修改此处斜体部分 DoIf ActiveCell.Offset(0, 0).Range('A1').Value = '' Then Exit Do ’当前行没有文件信息时,则自动退出程序。所以中间不要空行End IfClose #2Open 'c:' & ActiveCell.Offset(0, 0).Range('A1').Value For Binary Access Write As #2ReDim br(1 To ActiveCell.Offset(0, 0).Range('e1')) As ByteSeek 1, ActiveCell.Offset(0, 0).Range('c1').Value + ActiveCell.Offset(0, 0).Range('d1').Value + 1Get #1, , brPut #2, , brIf 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 ThenReDim br(1 To ActiveCell.Offset(0, 0).Range('I1'))Seek 1, ActiveCell.Offset(0, 0).Range('H1').Value + 10Get 1, , brPut 2, , br End IfEnd IfActiveCell.Offset(1, 0).Range('A1').Select Loop Close 1, 2 End Sub
关掉Visual Basic编辑器。
在当前页面按下Alt+F8(或是工具→宏→宏)。
选中WriteFile,点执行。
然后点开我的电脑→C盘,可以看到我们解压出来的图片。
用这种方法解压出来的图片完整无损,而且可以直接观看,不需要用ACDSEE另存。
相关文章: