android 原生分享到新浪,Android原生(Native)C开发之七:libjpeg移植笔记

Android原生(Native)C开发之七:libjpeg移植笔记

a4c26d1e5885305701be709a3d33442f.png

(2009-04-08 15:34:41)

标签:

jpeg

jpeg2000

android

libjpeg

native

c

cygwin

it

JPEG是Joint Photographic Experts

Group(联合图像专家组)的缩写,文件后辍名为".jpg"或".jpeg",是网上比较常见的图像文件格式,以小尺寸著称,但其最大的缺点是它是一种有损压缩的图像格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像品质。

JPEG2000作为JPEG的升级版,其压缩率比JPEG高约30%左右,同时支持有损和无损压缩。JPEG2000格式有一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,不断提高图像质量,让图像由朦胧到清晰显示。此外,JPEG2000还支持所谓的"感兴趣区域"

特性,可以任意指定影像上感兴趣区域的压缩质量,还可以选择指定的部分先解压缩。

本文只讨论JPEG的编码及解码,不包括JPEG2000,如果大家兴趣,可以网上找一些资料。

JPEG官方网站(http://www.jpeg.org)并不负责JPEG文件编码及解码的实现,只是制定标准,呵呵,应了那句话:一流的厂商订标准。JPEG的源码请从IJG(Independent

JPEG

Group,独立JPEG小组)的网站:http://www.ijg.org/下载,如果是支持tar及gz格式的下:

http://www.ijg.org/files/jpegsrc.v6b.tar.gz,

如果是Windows请下Zip格式:

ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/jpegsr6.zip。

下完后,解压之,得一目录:jpeg-6b,参见目录下的文件 jversion.h,发现JPEG库的版本是:6b

27-Mar-1998,可见此库是多么的古老与稳定,10多年前的东西了!

下完解完之后第一步,老规矩,先改makefile,将makefile.ansi复制一份,改名为

makefile,并改动如下行:

#09:CC= arm-none-linux-gnueabi-gcc

将gcc编译器改成 android arm的。

#12:CFLAGS= -O2

优化代码,据说 -O2(注意是字母“O”,不是数字“0”)在尺寸及效率上比较好。

#17:LDFLAGS= -s -static

Android Native必加链接参数 -static,-s 是将小库尺寸,去除调试信息。

#33:AR= arm-none-linux-gnueabi-ar rc

#35:AR2= arm-none-linux-gnueabi-ranlib

将AR及AR2库打包程序换成Android Native的。

试下在Cygwin下输入:make

呵呵,太心急了,得到提示如下:

You must prepare a system-dependent jconfig.h file.

Please read the installation directions in install.doc.

就是说 jconfig.h 不存在,我们要准备一个才能编译。找了一遍没打到适合Unix/Linux的,就直接打开

jconfig.doc,将所有内容copy出来,存成了

jconfig.h,因为里面的很详细的宏定义介绍。当然你可以将所有的宏定义都打开,再一个一个试,哪个出了问题就取消哪个。

再输入:make

一切OK,得到了库文件:libjpeg.a及 Andorid Native 可执行文件:cjpeg, djpeg, jpegtran,

rdjpgcom,

wrjpgcom。看名字就知道cjpeg应该就是一个jpeg文件的compressor(压缩器),将其他文件压缩成jpeg格式,djpeg肯定就是解压缩的了,传到

Android Emulator试下!

(其中“>”为普通命令提示符,“#”为模拟器命令提示符)

>adb push cjpeg /dev/sample/cjpeg

>adb push testimg.bmp /dev/sample/testimg.bmp

>adb shell

#cd /dev/sample

#chmod 777 cjpeg

#./cjpeg -quality 90 -outfile testimg.jpg testimg.bmp

#exit

>adb pull /dev/sample/testimg.jpg testimg.jpg

将cjpeg及测试图片 testimg.bmp push到模拟器,再执行cjpeg得到压缩图片

testimg.jpg,发现高质量(quality = 90)jpg格式图片的大小是bmp格式图片的

25%左右。有兴趣的朋友也可以试下djpeg及其他测试程序。

如下是通过 Android 模拟器压缩出来的jpg文件。

a4c26d1e5885305701be709a3d33442f.png

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值