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的命令提示符,测试如下图所示:

android libpng16,Android原生(Native)C开发之六:libpng移植笔记相关推荐

  1. Android原生(Native)C开发

    2019独角兽企业重金招聘Python工程师标准>>> 转载: Android原生(Native)C开发之一 环境搭建篇 转载: Android原生(Native)C开发之二 fra ...

  2. Android原生(Native)C开发之二 framebuffer篇

    为什么80%的码农都做不了架构师?>>>    Android原生(Native)C开发之二 framebuffer篇 如对Android原生(Natvie)C开发还任何疑问,请参阅 ...

  3. Android深度探索--HAL与驱动开发----第一章读书笔记

    1.1   Android拥有非常完善的系统构架可以分为四层: 第一层:Linux内核.主要包括驱动程序以及管理内存.进程.电源等资源的程序 第二层:C/C++代码库.主要包括Linux的.so文件以 ...

  4. Android深度探索--HAL与驱动开发----第十章读书笔记

    一.打印内核调试信息:printk Printk函数用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间,printk函数在printk.c文件中实现. P ...

  5. 混合开发架构|Android工程集成React Native、Flutter、ReactJs

    混合开发架构|Android工程集成React Native.Flutter.ReactJs 架构设计说明 创建安卓原生工程 创建Flutter 集成嵌入原生工程 创建React Native 解决R ...

  6. 基于android的简单网页_成都APP开发:APP原生和网页开发有什么区别?

    现在市面上的APP主要分为原生与网页开发两种模式,下面小编就分别针对APP的原生开发和网页开发两者间的优势和劣势介绍一下两者间的区别,希望帮助大家更好的了解这两种开发模式. 原生优势 1)运行速度比较 ...

  7. android开发 java.lang.IllegalStateException at android.media.MediaPlayer._prepare(Native Method)

    最近遇到一个问题,我在service里面播放一段音乐时遇到了IllegalStateException异常,代码是这样的: protected void play() {System.out.prin ...

  8. Android Native APP开发笔记:使用WebView控件加载网页

    文章目录 目的 基础使用 处理网页导航 加载本地网页 Web和Native之间交互 调试Web应用 处理页面重绘 总结 目的 WebView是一个比较常用的控件,功能上也比较单一,就是用来加载网页的, ...

  9. Android Native APP开发笔记:文件存储与访问

    文章目录 目的 基础说明 应用专属存储空间 共享存储 其它 总结 目的 APP开发与使用过程中免不了和文件打交道,对于Windows或Linux而言文件的存储与访问操作都很方便,直接通过文件系统路径和 ...

  10. android 支付宝微信原生以及HTML调用原生SDK

    最近公司又又又接了一个新的需求,某银行和我们合作,银行的开发团队是外包性质,为了方便开发,需求方让我们提供一个微信,支付宝sdk,Native和hTMl的对接形式,顾写了如下: 本SDK不生成订单数据 ...

最新文章

  1. 九、distinct
  2. 上周热点回顾(6.20-6.26)
  3. 多线程与高并发(六):线程池可用的各种高并发容器详解:CopyOnWriteList,BlockingQueue等
  4. 静态原型设计 加载中_见解1:原型设计有助于填补静态设计留下的空白。
  5. Jenkins 部署vue到服务器
  6. keil4怎么移植其他人的程序_关节炎怎么治疗效果才会好?
  7. Python面试题解答——第三部分Python高级
  8. javastring转long的方法_被JDK坑的没商量?来试试这些方法吧
  9. Axure 注册码(亲测可用)
  10. 本地搭建私有云盘:群晖系统存储空间设置 3/5
  11. 如何制作语音聊天程序源码,制作语音社交交友APP
  12. 人工智能时代,数据标注产业将迎来黄金时期?丨曼孚科技
  13. Linux系统的历史发展演绎
  14. HTTPS证书过期|SSL证书过期 |华硕路由器| NAS|Certtificate is not valid
  15. 数据中心的端口密度该如何增加?
  16. Spring-全面详解(基础知识)
  17. tsconfig.json文件报错JSON schema for the TypeScript compiler‘s configuration file
  18. Python变量与注释高级用法
  19. 计算机为什么能做翻译,为什么计算机能翻译?
  20. 切换双屏之后应用不显示在桌面的问题

热门文章

  1. Spring----pom.xml报错Missing artifact org.aspectj:aspectjweaver:jar:1.8.0.M1
  2. android关机铃声代码,android系统添加关机铃声
  3. nc 二次开发_金蝶云星空(K3CLOUD)和用友NC对比
  4. Windows XP 启动NetMeeting
  5. 软件加密狗破解思路和防破解的博弈之路
  6. 6、深思数盾加密狗使用小记
  7. angular 单击和双击事件分开
  8. 超链接小点html,html超链接取消鼠标点指显示小手
  9. 探索大型网站技术架构(二)
  10. 免费音效素材,拿走不谢。