Android图片编解码实现方案(Skia)

本文详细介绍了Android图片解码流程,重点解析了Skia在2D图像处理中的作用,包括图像解码、编码功能。通过SkTRegistry注册编解码器,利用第三方库或硬件实现Encoder和Decoder。SkImageDecoder_libjpeg.cpp等文件示例说明了如何注册和实现解码功能。
摘要由CSDN通过智能技术生成
               

1. Android图片解码流程

1)  APP:BitmapDecode.java

2) API:BitmapFactory.java(static image)、Movie.java(dynamic image)

3) JNI:BitmapFactory.cpp(static image)、Movie.cpp(dynamic image)

4) C Native Service(Skia):SkImageDecoder.cpp(static image)、SkMovie.cpp(dynamic image)

 2. Skia功能介绍

      Skia 是一个完整的2D图像库,包括图像,动画,文本绘制功能, RGB(8byte – 32byte)编码(jpeg, png) 和解码功能。(在android2.2 中支持 yuv 的编码解码)。.
1) 代码组织
      Skia 是一个 c++实现的代码库,在android 中以扩展库的形式存在,目录为external/skia/。其中文件 include/core/SkCavans.h 中定义了可以使用api.

Class SkCanvas:public SkRefnt
{
public:
drawARGB(...)
drawLine(....)
drawBitmap(....)
drawText(....)
}
    4个 public函数用于draw 各种数据,这4个函数是 skia 最重要的函数。

Class SkImageDecoder{
static bool DecodeMemory(....)
static bool DecodeFile(....)
static bool DecodeStream(....);
}

decoder 可以使用的3个decoder的函数对数据进行decoder,Decoder 支持 jpeg, png, gif 等。


Class SkImageEncoder
{
public:
static bool EncodeFile(....)
static bool EncodeStream(....)
}
     encoder 可以使用上面2个函数 对数据进行 encoder, 目前 encoder 只支持输出为jpeg 和 png. 输入只支持rawdata   RGB(8byte – 32byte)编码 。

    如果有硬件的编码和解码器可以通过继承SkImageDecoder和SkImageEncoder来实现硬件编码解码器。在 android 平台里面 类skImageDecoder_libjpeg.cpp 就是通过继承SkImageDecoder 使用类库libjpeg 实现 jpeg  的解码。

2)  android 中如何支持skia
     Skia 本身是一个 open source 的 project, 集成于android系统中。所以skia不是android 框架的一部分,不需要实现框架的api来支持skia。不过skia 同样可以挂接其他的第3方编码解码库或者硬件编解码库。

3. 分析Skia编解码实现方案

3.1 注册编解码器

    Skia 定义了类template <typename T, typename P> class SkTRegistry : SkNoncopyable
SkTRegistry 内部实现为一个链表。代码如下:


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值