性能优化12_Android高清显示图片:哈夫曼算法(编辑中)

Android性能优化汇总

一 原理

同样的图片,在ios手机上显示的效果要比安卓手机上效果要好?

  • 图片处理引擎用的是pc上的图片处理引擎skia
  • 去掉一个编码算法—哈夫曼算法。采用定长编码算法
    **原因:**当时由于CPU和内存在手机上都非常吃紧 性能差,由于哈夫曼算法非常吃CPU,被迫用了其他的算法。
    需求:,随着安卓设备硬件水平的提升,可以在性能的安卓设备上使用一些比较耗费性能的算法,使得图片显示的效果更佳
    **实现方式:**绕过安卓Bitmap API层,来自己编码实现----修复使用哈夫曼算法

二 图片基础

argb
一个像素点包涵四个信息:alpha,red,green,blue

a b c d e

abcde acdbe bacde ……

101010100011100
a:001
b:010
c:011
d:100
e:101
用3位来表示一个字符信息,属于定长编码的最优。

abcde
001 010 011 100 101
加权信息编码

a:80%
b:10%
c:10%
d:0%
e:0%
这种情况,编码就可以优化了
a:01
b:10
c:11
优化后的abc:01 10 11
优化前的abc:001 010 011

问题来了:
如何得到每一个字母出现的权重?
哈夫曼编码:需要去扫描真个信息(图片信息–每一个像素包括ARGB),药大量计算,很吃CPU。

1280800像素4

三 引入下载JPEG引擎使用的库—libjpeg库

http://www.ijg.org/

基于该引擎来做一定的开发----自己实现编码。

  1. 导入库文件libjpegbither.so
  2. 导入头文件
  3. 写mk文件
    Android.mk
    Applicatoin.mk
  4. 写代码
    C++: XX.cpp
    C: XX.c

四 步骤

  1. 将android的bitmap解码,并转换成RGB数据
    一个图片信息—像素点(argb)
    alpha去掉
  2. JPEG对象分配空间以及初始化
  3. 指定压缩数据源
  4. 获取文件信息
  5. 为压缩设置参数,比如图像大小、类型、颜色空间
    boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */
  6. 开始压缩
    jpeg_start_compress()
  7. 压缩结束
    jpeg_finish_compress()
  8. 释放资源
发布了229 篇原创文章 · 获赞 72 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/baopengjian/article/details/104227300