SKIA介绍

SKIA是一个2d向量图形处理函数库,包含字型,座标转换,以及点阵图都有高效且简介的表现。不仅用于Google Chrome浏览器,新兴的Android开放手机平台也采用skia作为绘图处理,搭配OpenGL/ES与特定的硬体特征,强化显示的效果。

skia的结构。使用svn从http://code.google.com/p/skia/下载最新的代码,没有任何文档信息,skia的源文件及部分头文件都在skia/src目录下,导出的头文件在skia/include目录下。打开skia源文件目录,主要有以下文件夹

目录介绍:

1.animator目录:

这部分是用来实现skia的动画效果。主要包含79个cpp文件。从文件名来看,主要分为以下几类:

以SkAnimator开头的一些文件:

SkAnimatorActive,SkAnimatorBase,SkAnimatorField,SkAnimatorSet,SkAnimatorScript等。

以SkDisplay开头的一些文件:SkDisplayAdle,SkDisplayAdd,SkDisplayEvents,SkDisplayList,SkDisplayInput,SkDisplayMovie等等。

以SkDraw开头的一些文件,SkDraw3D,SkDrawBitmap,SkDrawClip,SkDrawColor,SkDrawBlur,SkDrawLine,SkDrawPaint,SkDrawPath,SkDrawPoint
等。

以SkScript开头的一些文件,包括SkScript,SkScriptRuntime,SkScriptDecompi1e等。

这里,skia实现了一个脚本语言,用于控制动画。skia的这个脚本语言包括基本的数学运算:加(ADD)、减(SUB)、乘(MUL)、除(DIV)、模(MOD);基本逻辑及判断:
大于(GT)、小于(LT)、等于(EQ)、与(AND)、或(0R)、非(NOT)等;还包括基本的位运算(bit operation)。
在这个脚本中,主要有以下几个数据类型:NoType,Int,Scalar(等同于Float),String,Array,Object。这个目录下还包含一些辅助性的文件,如SkBase64,SkTime
等。

2.core目录
这就是skia的核心了,主要包含89个CPP文件。基本都是一些图形绘制函数。
主要包括:
SkColor,SkCanvas,SkBitmap,SkPicture,SkBIitter,SkCordic,SkPath.’SkPoint,SkRect,SkRegion,SkMask等等图形绘制类,还包括一些辅助性的类文件,sk64,skbuffer,skutils等。skia是分层次绘制的,当需要绘制时,通知每个layer上对象的canvas来绘制。

3.effects目录
这是skia实现一些图形图像效果的部分主要包括20个CPP文件。主要实现了以下特效:遮罩、浮雕、模糊、滤镜、渐变色、离散、透明等。并且实现了PATH的各种特效。

4.gl目录
GL库,封装了OpenGL\ES。主要包括7个CPP文件。开打SkGL.h,可以发现
#ifdef    SK_BUILD_FOR_MAC
#include<OpenGL/91.h>
#include<OpenGL/glext.h>
#elif defined(ANDROID)
#include<GLES/91.h>
#include<EGL/e91.h>
#endif
如果定义了MAC,则使用OpenGL,如果定义了Android,则使用嵌入式系统上的GLES三维图形库。porting的时候要加上#elif defined(SYMBIAN)之类的,防止别的地方也有android宏定义。打开SkGL,发现是几个基本的材质贴图函数。

5.images目录
这部分是用来处理images的,共23个CPP文件和一些头文件。主要是SklmageDecoder和SkIInageEncoder以及SkMovie。Skia能处理的图像类型包括以下类型:BMP,JPEG,PVJPEG,PNG,ICO等。另外,skia还能处理PDF文档。而SkMovie就是处理gif动画的部分。

6.ports目录
这部分是skia的一些接口在不同系统上的实现,共24个CPP文件。主要包括几个部分:Font,Event,File,Thread,Time,XMLParser这些与Skia的接口,需要针对不同的操作系统实现。

7.svg目录
这个目录包含28个CPP文件,从文件名看,都是一些画图文件。SkSVGPath,SkSVGPolyl ine,SkSVGRect,SkSVGText,SkSVGLine,SkSVGImage,SkSVGEllipse等。

8.utils目录
这个目录包含9个CPP文件,是一些辅助工具类SkCamera,SkColorMatrix,SkOSFile,SkProxyCanvas,SkInterpolator等文件。

9.views目录
这个目录包含24个CPP文件。skia构建了一套界面UI库。组件包括Window,Menu,TextBox,ListView,ProgressBar,Widget,ScrollBar,TagList,Image等。还有
组件的事件类。window对象负责接收事件,并传递给当前focus对象,focus对象处理相应的keyevents和mouse events。在SkiView基类类中定义并实现了draw,acceptFocus,moveFocus,cl ick等方法。

10.xml目录
这是处理xml数据的部分了。skia在这里只是对xml解析器做了一层包装,具体的xml解析器的实现需要根据不同的操作系统及宿主程序来实现。

2.2.2第三方库函数
skia还使用了一些third—party 1ibrary以及包含了不少linux上的头文件。
通过分析skia源程序,发现skia主要使用以下几个第三方库:
Zlib,处理数据的压缩和解压缩。
Jpegl ib,处理jpeg图像的编码解码。
Pngl ib,处理png图像的编码解码。
giflib,处理gif图像。
fpdfemb,处理pdf文档。

2.2.3操作系统支持
1.Android&Linux
SKIA天然支持Linux和Android操作系统无需移植。
2.Symbian
Symbian 3rd开始支持部分POSIX标准,所以以上的头文件函数实现,可能有部分不为Symbian所支持,不支持的必须自行实现。需要部分移植。
3.Windows Mobi le&Windows CE
SKIA提供了windows mobile的移植接口。方便在windows系统上进行二次开发。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值