android libpng16,Android原生(Native)C开发之六:libpng移植笔记
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移植笔记相关推荐
- Android原生(Native)C开发
2019独角兽企业重金招聘Python工程师标准>>> 转载: Android原生(Native)C开发之一 环境搭建篇 转载: Android原生(Native)C开发之二 fra ...
- Android原生(Native)C开发之二 framebuffer篇
为什么80%的码农都做不了架构师?>>> Android原生(Native)C开发之二 framebuffer篇 如对Android原生(Natvie)C开发还任何疑问,请参阅 ...
- Android深度探索--HAL与驱动开发----第一章读书笔记
1.1 Android拥有非常完善的系统构架可以分为四层: 第一层:Linux内核.主要包括驱动程序以及管理内存.进程.电源等资源的程序 第二层:C/C++代码库.主要包括Linux的.so文件以 ...
- Android深度探索--HAL与驱动开发----第十章读书笔记
一.打印内核调试信息:printk Printk函数用法与printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间,printk函数在printk.c文件中实现. P ...
- 混合开发架构|Android工程集成React Native、Flutter、ReactJs
混合开发架构|Android工程集成React Native.Flutter.ReactJs 架构设计说明 创建安卓原生工程 创建Flutter 集成嵌入原生工程 创建React Native 解决R ...
- 基于android的简单网页_成都APP开发:APP原生和网页开发有什么区别?
现在市面上的APP主要分为原生与网页开发两种模式,下面小编就分别针对APP的原生开发和网页开发两者间的优势和劣势介绍一下两者间的区别,希望帮助大家更好的了解这两种开发模式. 原生优势 1)运行速度比较 ...
- android开发 java.lang.IllegalStateException at android.media.MediaPlayer._prepare(Native Method)
最近遇到一个问题,我在service里面播放一段音乐时遇到了IllegalStateException异常,代码是这样的: protected void play() {System.out.prin ...
- Android Native APP开发笔记:使用WebView控件加载网页
文章目录 目的 基础使用 处理网页导航 加载本地网页 Web和Native之间交互 调试Web应用 处理页面重绘 总结 目的 WebView是一个比较常用的控件,功能上也比较单一,就是用来加载网页的, ...
- Android Native APP开发笔记:文件存储与访问
文章目录 目的 基础说明 应用专属存储空间 共享存储 其它 总结 目的 APP开发与使用过程中免不了和文件打交道,对于Windows或Linux而言文件的存储与访问操作都很方便,直接通过文件系统路径和 ...
- android 支付宝微信原生以及HTML调用原生SDK
最近公司又又又接了一个新的需求,某银行和我们合作,银行的开发团队是外包性质,为了方便开发,需求方让我们提供一个微信,支付宝sdk,Native和hTMl的对接形式,顾写了如下: 本SDK不生成订单数据 ...
最新文章
- 九、distinct
- 上周热点回顾(6.20-6.26)
- 多线程与高并发(六):线程池可用的各种高并发容器详解:CopyOnWriteList,BlockingQueue等
- 静态原型设计 加载中_见解1:原型设计有助于填补静态设计留下的空白。
- Jenkins 部署vue到服务器
- keil4怎么移植其他人的程序_关节炎怎么治疗效果才会好?
- Python面试题解答——第三部分Python高级
- javastring转long的方法_被JDK坑的没商量?来试试这些方法吧
- Axure 注册码(亲测可用)
- 本地搭建私有云盘:群晖系统存储空间设置 3/5
- 如何制作语音聊天程序源码,制作语音社交交友APP
- 人工智能时代,数据标注产业将迎来黄金时期?丨曼孚科技
- Linux系统的历史发展演绎
- HTTPS证书过期|SSL证书过期 |华硕路由器| NAS|Certtificate is not valid
- 数据中心的端口密度该如何增加?
- Spring-全面详解(基础知识)
- tsconfig.json文件报错JSON schema for the TypeScript compiler‘s configuration file
- Python变量与注释高级用法
- 计算机为什么能做翻译,为什么计算机能翻译?
- 切换双屏之后应用不显示在桌面的问题
热门文章
- Spring----pom.xml报错Missing artifact org.aspectj:aspectjweaver:jar:1.8.0.M1
- android关机铃声代码,android系统添加关机铃声
- nc 二次开发_金蝶云星空(K3CLOUD)和用友NC对比
- Windows XP 启动NetMeeting
- 软件加密狗破解思路和防破解的博弈之路
- 6、深思数盾加密狗使用小记
- angular 单击和双击事件分开
- 超链接小点html,html超链接取消鼠标点指显示小手
- 探索大型网站技术架构(二)
- 免费音效素材,拿走不谢。