半自動的步槍--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另存。
相關文章: