如何使用zlib庫來解壓縮PNG文件?我需要使用gcc編譯器下的C來讀取PNG文件。使用zlib解壓縮PNG
回答
我已經編寫了一個用於讀/寫PNG的基本Java庫文件:http://code.google.com/p/pngj/
它不支持palleted圖像,但除了那 [更新:它支持現在所有的PNG變種]這是相當完整的,簡單的代碼,沒有外部的依賴關係(即只使用標準JSE API ,其中包括zip解壓縮)。代碼可用。我想你可以用很少的努力將它移植到C上。
爲什麼不使用libpng? PNG文件格式非常簡單,但有許多不同的可能的變體和編碼方法,確保覆蓋所有的情況可能非常繁瑣。像libpng這樣的東西自動處理所有的轉換和東西。
您應該仔細閱讀二進制文件格式的工作原理,並使用十六進制編輯器而不是文本編輯器來查看這些文件。通常你應該使用libpng來處理前面提到的png文件,但是如果你想自己解碼,你需要做很多的閱讀工作。
嗨,我被告知只使用標準的C庫和zlib是唯一一個正在額外提供。你能給我一些指點嗎? – 2010-03-29 04:16:47
我給出的鏈接是關於libpng如何解壓縮png的詳細說明。我的猜測是zlib應該在取出標題等之後用於原始數據。 – Hobblin 2010-03-29 14:26:32
如果這是一個家庭作業,你真的只限於標準C庫,你可以看官方的PNG文件格式規範:http://www.w3.org/TR/PNG/。但是,你確定你確實需要解碼PNG文件嗎?如果你需要做的就是以某種方式展示它,那麼你就走錯了路。
爲任何一般的PNG文件編寫解碼器將會非常複雜和耗時,但對於簡單的PNG文件來說不會太糟糕。事實上,由於PNG格式允許壓縮它的一部分,因此只需要使用標準C庫就可以實現gzip解壓縮(這是中級本科課程的合理作業),但我的猜測是你在分配給你之前會花費很多討論壓縮算法)
但是,如果將自己限制爲非壓縮的非隔行PNG文件,這並不是非常困難。我在Python中編寫了一個解碼器,僅在幾個小時內處理了簡單的情況,所以我確信它可以在C中實現。
嗨smehmood,謝謝你的信息。但我需要使用標準C函數讀取PNG文件,解壓縮文件,然後以可讀格式打印文件的信息。要打印的信息包括:PNG文件的結構,PNG文件的簽名,每個塊的類型和長度。 – 2010-03-29 17:49:15
你所描述的是非常可行的。你只需要閱讀我提供的PNG文件格式規範,它會告訴你文件是如何佈局的,以及所有信息的存儲位置。 – smehmood 2010-03-29 19:08:00
- 1. 解壓縮Zlib
- 2. ZLIB解壓縮
- 3. zlib/libz.dylib解壓縮
- 4. Zlib解壓縮C++
- 5. zlib壓縮和解壓
- 6. 的zlib壓縮/解壓縮Linux編程
- 7. 使用zlib庫進行gzip解壓縮
- 8. 使用zlib時解壓縮錯誤
- 9. 使用zlib進行內存解壓縮
- 10. ZLib位深度爲1的PNG壓縮
- 11. 解壓縮zlib編碼nsdata
- 12. 使用zlib和cPickle將字典壓縮/解壓縮到文件
- 13. 用pako壓縮(javascript中的zlib),用zlib(python)解壓縮不起作用
- 14. 使用Python zlib的解壓縮與JavaScript的zlib
- 15. 放氣:解壓縮沒有zlib的PNG(或任何其他庫)
- 16. ZLIB壓縮
- 17. PNG:緊縮和zlib
- 18. png文件的壓縮和解壓縮
- 19. 調用C zlib的解壓縮從C#
- 20. 在Nodejs中使用zlib壓縮和解壓數據
- 21. 在c#中使用zlib壓縮文件時解壓文件
- 22. zlib壓縮錯誤
- 23. ASIHTTPRequest的zlib壓縮
- 24. 'zlib'的解壓縮()返回Z_DATA_ERROR
- 25. 的Zlib解壓縮回報Z_DATA_ERROR
- 26. zlib不同的解壓縮大小
- 27. 如何解壓縮的zlib的NSData
- 28. Python:解壓縮zlib字符串
- 29. Boost Zlib在解壓縮時失敗
- 30. zlib解壓縮頭檢查錯誤
嗨,因爲我被告知使用標準C庫,我不能使用libpng庫嗎? – 2010-03-29 04:17:26
告訴誰?這是功課嗎?如果是這樣,你應該爲'家庭作業'添加一個標籤。 – 2010-03-29 04:24:42
好的。你現在可以引導我嗎? – 2010-03-29 07:29:14