android的skia

本文深入探讨了Skia图形库在Android图形系统中的角色与应用,包括其核心组件、对上层接口的提供、图像编解码功能、与Java层交互的JNI接口,以及2D图形硬件加速的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 Skia 概述

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

Skia 作为第三方软件放在 external 目录下: external/skia/ 。

Skia 的结构如下图所示:

主要包含三个库:

libcorecg.so: 包含 /skia/src/core 的部分内容,比如其中的 Region , Rect 是在 SurfaceFlinger 里面用来计算可视区域的;

libsgl.so: 包含 /skia/src/core|effects|images|ports|utils 的部分和全部内容,这个实现了 skia 大部分的图形效果,以及图形格式的编解码;

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

2 Skia 对上层的接口( API )

skia 的源文件及部分头文件都在 external/skia/src 目录下,导出的头文件在 external/skia/include 目录下。最主要的是 SKCanvas 类,几乎整个 Android GUI 系统的底层绘制都是由这个类来完成的。其头文件和源代码文件的路径分别为:

external/skia/include/core/SKCanvas.h

external/skia/include/core/SKCanvas.cpp

SKCanvas 类主要有三种绘制功能:

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

b 图像文件绘制( drawBitmap 函数)

c 文本绘制( drawText 函数)

3 Skia 的图像编解码部分

这部分的接口主要是:

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

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

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

4 Android 图形系统的 JNI 接口

主要提供了从 Skia 底层库到 Java 上层的支持,代码路径为:

frameworks/base/core/jni/android/graphic/

主要为 Canvas.cpp 文件。

5 Android 的图形包( graphics )

Android 图形类的包是 android.graphics, 它通过调用图形系统的 JNI 提供了对 Java 框架中图形系统的支持,在 Android 的 Java 框架中和 Java 应用程序中, 2D 绘制的功能(基本图形、图片文件,文字)也是通过调用它来实现的。代码路径为:

frameworks/base/graphics/java/android/graphics/

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

6 Android 2D 图形硬件加速

目前 Android 2D 图形硬件加速主要是通过 copybit 模块来实现, Copybit 是封装在 Android 系统 opengl 软件实现库( libagl )的一部分,仅对 openGL ES 2D API 进行封装,实现 openGL ES 2D API 到硬件的加速功能。

copybit 模块以 HAL 的形式实现,代码 hardware/msm7k/libcopybit/copybit.c



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值