安卓之Skia

【概念】

    Skia 是 Google 一个底层的图形、图像、动画、 SVG 、文本等多方面的图形库,是 Android 中图形系统的引擎。

        Android里画图或者渲染图像,都需要Skia提供的API接口,或者是间接提供。

    所有Activity或者View或者其他控件的显示,在底层都是通过Skia提供的函数进行显示的。

       Canvas是通过Native方式,调用底层的SkCanvas的。

【源码相关目录】

1.头 文件 --- android/external/skia/include

2.源文件  --- android/external/skia/src

3.封 装层 --- android/framework /base/core/jni    &&  android/framework/base/core/jni/android/graphics 

            (对Skia引擎进行了封装,以便让java代码方便的调用.主要是 对Canvas, Bitmap, Graphics, Picture等等的封装,

             以及和libui库的结合使用。)

【代码角度分析】

  skia 有大概 80,000 行代码,基于 C++ 开发。

应用层到底层的调用关系


【涉及到的3个库】
     libcorecg.so    包含/skia/src/core的部分内容,比如其中的Region,Rect是在SurfaceFlinger里面计算可是区域的操作基本单位;


     libsgl.so         包含/skia/src/core|effects|images|ports|utils的部分和全部内容,

  这个实现了skia大部分的图形效果,以及图形格式的编解码;


     libskiagl.so     包含/skia/src/gl里面的内容,主要用来调用opengl实现部分效果。

【运用小例子 -- 专业图像处理软件

因为Android平台对应用程序的内存限制,并且java的处理效率低下;所以有这么一个方法:NDK+Skia

采用这种方法,绘制屏幕,将会少消耗一半的内存,有没有很开心的感觉!

【缺点】

Skia 本身不是很稳定,所以Skia并没有被包含在NDK的发布包中

使用Skia引擎时的注意事项

1.静态编译,这种方法其实并不好,因为我们在项目中一般都会结合Java对象和NDK来使用Skia,
  静态编译可能会造成一些难以预料的问题。
2.关于Skia库libskia.so,可以直接从相关设备上提取,不过由于Skia库的不稳定性,版本依赖非常严重。 
  adb pull /system/lib/libskia.so 这样的命令就可以。
3.编译自己的动态库时,需要包含正确版本的Skia源文件,一定不能混用,
  比如用3.1版本的源文件来编译用于4.0版本的动态库,这样非常容易出问题。
4.在做Skia相关的应用时,一定要做好版本关联。可以使用git下载不同版本的Android的skia源文件。
【核心类 -- SKCanvas 
最主要的是 SKCanvas 类,几乎整个 Android GUI 系统的底层绘制,都是由这个类来完成的。
     三种绘制功能:

基本图形绘制 如 drawARGB,drawLine 函数 )

图像文件绘制( drawBitmap 函数)

文本绘制( drawText 函数)

Skia 的图像编解码部分:

external/include/image/SKImageDecoder.h // 把图像文件或者流解码到 skia 的内部内存SKBitmap 中 ;

external/include/image/SKImageEncoder.h // 把 skia 内部内存 SKBitmap 编码成文件或流的形式;

这些接口需要具体的类实现,主要代码在 src/image 文件中

  JNI 接口:

Skia 底层库到 Java 上层的支持

代码路径为:frameworks/base/core/jni/android/graphic/ 主要为 Canvas.cpp 文件。

Android 的图形包( graphics ):

它通过调用图形系统的 JNI ,在 Android 的 Java 框架中和 Java 应用程序中, 进行2D 绘制的功能

(基本图形、图片文件,文字)也是通过调用它来实现的。

代码路径为:frameworks/base/graphics/java/android/graphics/

Canvas.cpp 文件实现了 Android 图形系统中最重要的一个类 android.graphic.canvas

【代码Demo集合】

http://www.360doc.com/content/13/0401/16/7891085_275323215.shtml

http://blog.csdn.net/youngkingyj/article/details/16880279












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值