Windows下zlib庫和libPng庫的編譯和使用

來源:互聯網
上載者:User

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);

轉載:點擊開啟連結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.