[转] SKIA结构目录

使用vs编译所有的skia 文件 ,然后会得到大概3500条错误消息。这很可能是某些宏定义不正确,或者某些编译开关没有正确设置 ,或者某些接口没有实现等。但编译器给出的错误消息往往对解决 问题没有帮助,编译器给出的绝大部分错误都是不可能出错的地方,标准的C++语法。于是只能先看一下SKIA的结构。

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

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, SkScriptDecompile等。

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

这个目录下还包含一些辅助性的文件,如SkBase64, SkTime等。

core 目录
这就是skia的核心了,主要包含89个CPP文件。
基本都是一些图形绘制函数。
主要包括SkColor, SkCanvas,SkBitmap,SkPicture,SkBlitter,SkCordic,SkPath,SkPoint,SkRect,SkRegion,SkMask 等等图形绘制类,还包括一些辅助性的类文件,sk64, skbuffer, skutils等。

skia是分层次绘制的,当需要绘制时,通知每个layer上对象的canvas来绘制。

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

并且实现了PATH的各种特效。

gl 目录
从名字看,并不知道这是做什么用的,gl=graphics library,图形库。
主要包括7个CPP文件。

开打SkGL.h,可以发现
#ifdef SK_BUILD_FOR_MAC
    #include <OpenGL/gl.h>
    #include <OpenGL/glext.h>
    #include <AGL/agl.h>
    // use FBOs for devices
    #define SK_GL_DEVICE_FBO
#elif defined(ANDROID)
    #include <GLES/gl.h>
    #include <EGL/egl.h>
#endif
所以,这部分是skia调用OpenGL或OpenGL ES来实现3D效果。
如果定义了MAC,则使用OpenGL,如果定义了Android,则使用嵌入式系统 上的esgl三维图形库。porting的时候要加上#elif defined(SYMBIAN)之类的,防止别的地方也有android宏定义。

打开SkGL,发现是几个基本的材质贴图函数。

images目录
这部分是用来处理images的,共23个CPP文件和一些头文件。
主要是SkImageDecoder和SkImageEncoder以及SkMovie。
Skia能处理的图像类型包括以下
BMP
JPEG/PVJPEG
PNG
ICO
另外,skia还能处理PDF文档。
使用了一个fpdfemb库。

而SkMovie就是处理gif动画。

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

这些与Skia的接口,需要针对不同的操作系统 实现。
svg 目录
这个目录包含28个CPP文件,从文件名看,都是一些画图文件。
SkSVGPath, SkSVGPolyline, SkSVGRect, SkSVGText, SkSVGLine, SkSVGImage, SkSVGEllipse等等。

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

views目录
这个目录包含24个CPP文件。
skia构建了一套界面UI库。
组件包括Window,Menu, TextBox, ListView, ProgressBar, Widget, ScrollBar,TagList,Image等。
还有组件的事件类。

window对象负责接收事件,并传递给当前focus对象,若无focus对象,则focus自身。focus对象处理相应的key events和mouse events。

在SkiView基类类中定义并实现了draw, acceptFocus,moveFocus,click等方法。

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


third-party library
以上就是所有的skia source code了,当然,仅仅依靠这些是不可能编译通过了,skia还使用了一些third-party library以及包含了不少linux 上的头文件。

通过分析skia源程序,发现skia主要使用以下几个第三方库:
Zlib,处理数据的压缩和解压缩
Jpeglib,处理jpeg图像的编码解码
Pnglib,处理png图像的编码解码
giflib,处理gif图像
fpdfemb,处理pdf文档

skia还需要一些linux/unix下的头文件(可能还需要更多):
stdint.h
unistd.h
features.h
cdefs.h
stubs.h
posix_opt.h
types.h
wordsize.h
typesizes.h
confname.h
getopt.h
mman.h

OS
1. Android & Linux
天然的支持Skia

2. Symbian
Symbian 3rd开始支持部分POSIX标准,所以以上的头文件函数实现,可能有部分不为Symbian所支持,不支持的必须自行实现。
参见:http://innovator.samsungmobile.com/cn/cms/cnts/category.main.list.do?platformId=1&cateId=159
►C标准库和POSIX转义符(equivalents)

Symbian OS包括ANSI C / POSIX标准库应用 ,提供了stdlib子集以支持将C和混合C / C++代码移植到Symbian OS。

它还包括P.I.P.S. POSIX库。如果您有一个现成应用, P.I.P.S.尤其可以使核心应用逻辑的移植容易得多。 P.I.P.S. 被专门的Wiki全面涵盖。

3. Windows Mobile & Windows CE
支持POSIX,所以应该也可以支持SKIA.

 

转自 :http://blog.youkuaiyun.com/yili_xie/archive/2009/11/12/4803563.aspx

 

04-03
<think>好的,用户想了解Skia图形库的使用教程和API文档。首先,我需要整理已有的引用内容,看看里面有没有相关的信息。根据用户提供的引用,引用[1]提到了Skia项目的基本使用教程,包括目录结构、启动文件和配置文件的介绍。引用[2]、[3]、[4]则介绍了Skia的基本功能和项目地址,其中引用[4]还提到项目托管在https://skia.org,那里有详细文档和构建指南。 接下来,我需要确认这些信息是否足够回答用户的问题。用户需要教程和API文档,引用[1]中的使用教程可能不够详细,但结合引用[4]中的官方网站,可以建议用户访问官网获取更多资源。此外,引用[3]提到了中文使用手册,可能对中文用户有帮助。 另外,用户可能还需要安装和配置的步骤,但现有引用中没有详细说明,可能需要补充一些通用步骤,比如通过Git获取代码、构建工具的使用等。同时,可能需要提到社区资源如Stack Overflow和GitHub Issues作为支持渠道。 需要确保回答结构清晰,分步骤说明。首先介绍官方资源,然后是中文本地化资料,接着是安装配置,最后是开发资源和社区支持。同时,生成的相关问题需要围绕Skia的应用场景、核心功能、中文资料获取以及性能优化等方面。 最后检查是否符合用户的要求:使用中文回答,行内公式用$...$,独立公式用$$...$$(虽然这个问题可能不需要数学公式),引用标识正确添加。确认没有使用Markdown格式,语言口语化,自然分段。</think>Skia图形库使用教程与API文档信息整理如下: ### 一、官方资源 1. **核心文档入口** 访问[Skia官网](https://skia.org)可获取完整API文档、构建指南和示例代码。文档包含以下核心模块: - 画布(Canvas)的绘制操作 - 路径(Path)与几何变换 - 图像编解码器(Image Codecs) - 文本渲染与字体处理[^4] 2. **中文使用手册** 通过[GitCode镜像仓库](https://gitcode.com/gh_mirrors/sk/skia)可获取社区维护的中文手册,包含: - 图形上下文初始化配置 - 基础绘图单元使用示例 - 硬件加速设置指南[^3] 3. **项目结构解析** 项目目录包含: ``` include/ # 头文件目录 src/ # 核心实现 modules/ # 扩展模块 ``` 启动文件通常通过`SkSurface`创建绘图表面[^1] ### 二、开发准备 ```bash # 克隆仓库 git clone https://gitcode.com/gh_mirrors/skia/skia.git # 安装依赖 python tools/git-sync-deps # 编译示例 bin/gn gen out/Static --args='is_official_build=true' ninja -C out/Static ``` ### 三、基础API示例 ```cpp #include "SkCanvas.h" #include "SkGraphics.h" void draw(SkCanvas* canvas) { SkPaint paint; paint.setColor(SK_ColorRED); canvas->drawCircle(50, 50, 30, paint); // 绘制红色圆形 } ``` 该示例展示了基础图形绘制流程,通过$SkPaint$控制绘制样式[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值