libpng
是一套免費的、公開原始碼的程式庫,支援對 PNG 圖形檔案的建立、讀寫等操作。
zlib
是通用的開源壓縮庫。
libpng 可以到www.libpng.org 上
下載原始碼。libpng 使用 zlib 程式庫作為壓縮引擎,zlib 也是著名的 gzip (GNU zip) 所採用的壓縮引擎。zlib 是通用的壓縮庫,提供了一套 in-memory 壓縮和解壓函數,並能檢測解壓出來的資料的完整性(integrity)。zlib 也支援讀寫 gzip (.gz) 格式的檔案這些都是免費和公開的哦。
在下載了pbglib,並且要下載zlib,如何才能加到代碼中呢?
以VC6.為例來說明。其他CBuild等編譯器相信也一樣的。比如我們從網上下載了一個lpng1210.zip和zlib-1.2.3.tar.tar。
首先把他們解壓。在lpng的目錄中尋找 projects/visualc6/libpng.dsw。並在zlib中尋找zlib-1.2.3/projects/visualc6 /zlib.dsw。用vc開啟libpng工程檔案,把zlib的工程檔案也添加進去。設定好在setting中設定好的zlib.lib和pbg.lib的輸出路徑,以及include路徑(這個簡單方法相信大家都明白吧)。運行後,就產生了兩個靜態庫了。lib做好以後,就可以將lib加到我們要做的工程中去。在link中設定好,並將png.h和zlib.h都加進去。這樣就可以正式的使用libpng了!
zlib安裝使用
zlib的安裝:下載後查看makeFile.msc檔案
在vs.net的命令視窗運行cmd,
進入win32\中執行:nmake -f win32/Makefile.msc
zlib的使用方法
所需的標頭檔和庫名稱
包含標頭檔 zlib.h 和 zconf.h 和 zdll.lib(或是zlib.lib)
zlib在程式中壓縮buffer緩衝區:
//壓縮src壓縮到dest中,srclen是原來的長度,destLen是壓縮後的長度
//result: =Z_OK成功、Z_MEM_ERROR沒有足夠的記憶體,Z_BUF_ERROR目標緩衝不夠大
//level: 壓縮層級
int compress(byte *dest, ulong *destLen, const byte *src, ulong srcLen);
int compress(byte *dest, ulong *destLen, const byte *src, ulong srcLen, int level);
//將src解壓到dest中,srclen是原長度,destlen是解壓後的長度
//result: =Z_OK成功、Z_MEM_ERROR沒有足夠的記憶體,
// Z_BUF_ERROR目標緩衝不夠大,=Z_DATA_ERROR資料出錯
int uncompress(byte *dest, ulong *destLen, const byte *src, ulong srcLen);
//計算需要壓縮的緩衝區的長度;粗略的計算
ulong compressBound(ulong srcLen);
deflateInit(), deflate(), deflateEnd() 內部進行壓縮
inflateInit(), inflate(), inflateEnd() 內部進行解壓
gz開頭的函數,是用來操作*.gz檔案和stdio的函數類似,
其實只要有compress和uncompress兩個函數就足夠用了
壓縮和解壓的小例子
//未壓縮的未經處理資料
unsigned char pchSrc[] = "xxx...." ;
unsigned long nSrcLen = sizeof(pchSrc);
//壓縮之後的資料要儲存的緩衝區
unsigned char achComp[1024];
unsigned long nCompLen = 1024;
//解壓縮之後的資料存放區的緩衝區
unsigned char achUncomp[1024];
unsigned long nUncompLen = 1024 ;
//將未經處理資料壓縮到壓縮緩衝內
compress(achComp,&nCompLen, pchSrc,nSrcLen);
//將壓縮的資料解壓到解壓緩衝區內
uncompress(achUncomp,&nUncompLen, achComp,nCompLen);
//顯示未經處理資料資訊
printf("未經處理資料(%d):\n%s\n\n", nSrcLen,pchSrc);
//顯示壓縮之後的資料
printf("壓縮資料(%d):\n%s\n\n", nCompLen,achComp);
//顯示解壓縮之後的資料
printf("解壓資料(%d):\n%s\n\n", nUncompLen,achUncomp);
轉載:點擊開啟連結