這幾天,我一直在嘗試著寫一個簡單的程式,能夠在解壓縮 7Zip 中的 BMP 時順便將之轉成 JPG。在記憶體中作轉換可以有效節省硬碟讀取次數跟所需的硬碟空間。在各種嘗試下的抵達了終點,可是才發現有個很重要的問題無法解決,所有心血算是白費了。
我首先是想直接修改 7Zip 本身,不過自己身為 C++ 的新手,實在無法瞭解要怎樣才能修改。而想嘗試使用 7z.dll ,卻無法理解 dll 要怎樣使用。最後連 LZMA 的 source 都看過了,還是覺得霧煞煞。幸好偶然發現有個叫做 C# (.NET) Interface for 7-Zip Archive DLLs ,之後更發現了繼承其精神的 SevenZipSharp ,讓工程大有突破。
在研究 SevenZipSharp 以後,我決定還是使用 C# 來當開發的工具。C#就像是 Java ,提供了很完整的資料庫,開發小型的圖形化程式十分方便。終於,克服了重重 bugs ,終於開發出了能夠解壓縮 bmp 又順便轉換成 jpg 的程式。
可惜的是,當我測試某個有 1000 張 bmp 的 7z 檔案時,發現解壓縮需要好幾個小時。這才發現,原來我使用的這個 ExtractFile 函式,因為一次只會解壓縮一個檔案,而因為 7Z 是種 solid 壓縮檔,所以解壓縮一個檔案就必須把這個檔案之前的所有檔案都算一遍。原本解壓縮時 7Zip 有最佳化,會依序解壓縮並保持計算過的進度,所以時間上不會很緩慢,但是這個 SevenZipSharp 的 API 沒有作到這麼完善,等於說解壓縮這個測試檔就要花 500 倍的時間。而要修改 API 本身對我來說還是太困難,所以自己的心血算是白費了。
唉,實在是山窮水盡疑無路,目前的柳暗花明又一村還遙遙無期。
寫程式真的很花時間又耗費腦力呢!