Android原生(Native)C開發之六:libpng移植筆記

來源:互聯網
上載者:User

 原文:http://blog.sina.com.cn/s/blog_4a0a39c30100b8w6.html

 

libpng(http://www.libpng.org/)是讀取PNG(Portable Network Graphic
Format)檔案的最官方的函數庫,所以在介紹libpng之前,有必要先介紹下PNG檔案。

PNG是20世紀90年代中期開始開發的影像檔儲存格式,其目的是企圖替代GIF和TIFF檔案格式,同時增加一些GIF檔案格式所不具備的特性。流式網狀圖形格式(Portable
Network Graphic Format,PNG)名稱來源於非官方的“PNG's Not GIF”,是一種位元影像檔案(bitmap
file)儲存格式,讀成“ping”。PNG用來儲存灰階映像時,灰階映像的深度可多到16位,儲存彩色映像時,彩色映像的深度可多到48位,並且還可儲存多到16位的α通道資料。PNG使用從LZ77派生的無損資料壓縮演算法。

PNG用了無損資料壓縮演算法,用的壓縮庫上是上一篇介紹的zlib,編譯libpng前,要先編譯zlib(請參見上一篇:Android原生(Native)C開發之五:zlib移植筆記)。

先從sourceforge下載libpng的最新版本:1.2.33,請選擇without config
script版本:bz2格式,zip格式,這個版本沒有configure檔案,因為基本上不需要改動libpng的設定,就能編譯通過。

將下載的源碼包解開,得到時一個名為 libpng-1.2.33 的目錄,將 scripts/makefile.gcc 複製到
libpng-1.2.33/Makefile,將此檔案的 8 - 27 行改成如下即可(粗體為增加部分):

...
ZLIBINC = ../zlib-1.2.3
ZLIBLIB = ../zlib-1.2.3

# Compiler, linker, lib and other tools
CC = arm-none-linux-gnueabi-gcc
LD = $(CC)
AR_RC = arm-none-linux-gnueabi-ar rcs
RANLIB = arm-none-linux-gnueabi-ranlib
RM_F = rm -f

CDEBUG = -g -DPNG_DEBUG=5
LDDEBUG =
CRELEASE = -O2
LDRELEASE = -s -static
#CFLAGS = -W -Wall $(CDEBUG)
CFLAGS = -W -Wall $(CRELEASE)
#LDFLAGS = $(LDDEBUG)
LDFLAGS = $(LDRELEASE)
LIBS = -lz -lm
...

在Cygwin或Linux命令列方式進入libpng-1.2.33目錄,輸入: make
即可成功編譯libpng,得到時的靜態庫libpng.a及可執行檔 pngtest。

用 emulator -noskin 命令啟動 Android
模擬器,將pngtest上傳到模擬器,即可測試pngtest:

$adb shell mkdir /dev/sample
$adb push pngtest /dev/sample
$adb push pngtest.png /dev/sample
$adb shell chmod 777 /dev/sample/pngtest
$adb shell
#cd /dev/sample
#./pngtest pngtest.png
Testing libpng version 1.2.33
   with
zlib   version 1.2.3

 libpng version 1.2.33 - October 31, 2008
   Copyright (c) 1998-2008 Glenn
Randers-Pehrson
   Copyright (c) 1996-1997
Andreas Dilger
   Copyright (c) 1995-1996 Guy
Eric Schalnat, Group 42, Inc.
 library (10233): libpng version 1.2.33 - October
31, 2008

 pngtest (10233): libpng version 1.2.33 - October
31, 2008
 sizeof(png_struct)=984,
sizeof(png_info)=288
Testing pngtest.png:
 Pass 0: rwrwrwrwrwrwrwrwrw
 Pass 1: rwrwrwrwrwrwrwrwrw
 Pass 2: rwrwrwrwrwrwrwrw
 Pass 3:
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
 Pass 4:
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
 Pass 5:
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
        
rwrwrwrw
 Pass 6:
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
        
rwrwrwrwrw
 PASS (9782 zero samples)
 Filter 0 was used 21 times
 Filter 1 was used 15 times
 Filter 2 was used 52 times
 Filter 3 was used 10 times
 Filter 4 was used 33 times
 tIME = 7 Jun 1996 17:58:08 +0000
libpng passes test

其中"$"為cygwin的命令提示字元,"#"為 adb shell的命令提示字元,測試如所示:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.