Skia简介和图形案例

Overview

Skia是一个开源的2D图形库,提供各种常用的API,并可在多种软硬件平台上运行。谷歌Chrome浏览器、Chrome OS、Android、火狐浏览器、火狐操作系统以及其它许多产品都使用它作为图形引擎。

Skia由谷歌出资管理,任何人都可基于BSD免费软件许可证使用Skia。Skia开发团队致力于开发其核心部分, 并广泛采纳各方对于Skia的开源贡献。

功能展示与图形案例

下图是一系列图形案例,用来展示Skia可以实现的功能。因为内容太多,浏览器无法渲染所有的图形示例,导致一部分Demo没有显示出来,变成了白色的方块。

这张图是Skia官方的示例图:

API Reference

关键的类

  • SkAutoCanvasRestore - Canvas save stack manager
  • SkBitmap - two-dimensional raster pixel array
  • SkBlendMode - pixel color arithmetic
  • SkCanvas - drawing context
  • SkColor - color encoding using integer numbers
  • SkFont - text style and typeface
  • SkImage - two dimensional array of pixels to draw
  • SkImageInfo - pixel dimensions and characteristics
  • SkIPoint - two integer coordinates
  • SkIRect - integer rectangle
  • SkMatrix - 3x3 transformation matrix
  • SkPaint - color, stroke, font, effects
  • SkPath - sequence of connected lines and curves
  • SkPicture - sequence of drawing commands
  • SkPixmap - pixel map: image info and pixel address
  • SkPoint - two floating point coordinates
  • SkRRect - floating point rounded rectangle
  • SkRect - floating point rectangle
  • SkRegion - compressed clipping mask
  • SkSurface - drawing destination
  • SkTextBlob - runs of glyphs
  • SkTextBlobBuilder - constructor for runs of glyphs

API Overview

SkCanvas 是Skia的核心,Skia的逻辑都是围绕着 SkCanvas 对象组织的。drawRect, drawPath, drawText等所有的draw calls (绘制命令)都由 SkCanvas 来管理。

draw calls 由两个部分构成:

  • primitive(图元)- SkRect, SkPath, etc.
  • color/style attributes (颜色/样式属性)- SkPaint

SkCanvas指明画在哪里(where),primitive声明要画什么(what),SkPaint说明怎么画(how)。

canvas->drawRect(rect, paint);

所以上面的代码的含义是:在给定的画布(canvas)上绘制一个矩形,paint参数用来描述如何绘制这个矩形,其中包含大量的状态用来描述:矩形是什么颜色,矩形是填充还是描边,应该如何与先前绘制的颜色混合。

相对于PaintCanvas维护的状态较少,它的作用是:

  • 指向要绘制的实际像素
  • 维护matrices (矩阵)和 clips(裁剪)等操作的栈

因此,在上述调用中,canvas的矩阵操作可以转换矩形的坐标(平移,旋转,倾斜,透视),并且canvas的剪辑操作可以限制矩形在画布上绘制的位置,除此之外所有其他样式绘图的属性都由paint控制。

参考文档:
https://skia.org/user/api

Skia Overview and API Reference相关推荐

  1. 【NFC】Android NFC API Reference中英文

    SkySeraph 博客园 首页 新随笔 联系 订阅 管理 随笔- 192  文章- 0  评论- 441  [NFC]Android NFC API Reference中英文 [NFC]Androi ...

  2. Console Utilities API reference

    摘自:https://developer.chrome.com/docs/devtools/console/utilities/ The Console Utilities API contains ...

  3. Skia overview

    转自:http://blog.csdn.net/fengbingchun/article/details/38492061 Skia是一个C++的开源2D向量图形处理函数库(Cairo是一个矢量库), ...

  4. .net api reference中文_在macOS上使用.NET SDK编译 .NET 通用中间语言

    当你编译C#.F#或http://VB.NET代码时,编译器不会将其编译成原生代码,而是将其编译成通用中间语言.然后,IL代码被CLR/CoreCLR编译成可以在CPU上运行的机器代码.我想给大家展示 ...

  5. kmdjs api reference

    总览 kmdjs的主要就两个API:kmdjs.config和define kmdjs.config kmdjs.config是用于项目整体配置,一般的配置如下所示: kmdjs.config({na ...

  6. 在线html5 api中文版,HTML5+ API Reference

    IO模块管理本地文件系统,用于对文件系统的目录浏览.文件的读取.文件的写入等操作.通过plus.io可获取文件系统管理对象. 常量: 方法: 对象: DirectoryEntry: 文件系统中的目录对 ...

  7. SAP WebIDE:how to enable context API reference

    Created by Wang, Jerry on Jan 18, 2015 complete url: https://sapui5.hana.ondemand.com/sdk/#docs/api/ ...

  8. html5在线api,HTML5+ API Reference

    Push模块管理推送消息功能,可以实现在线.离线的消息推送,通过plus.push可获取推送消息管理对象. 方法: 对象: ClientInfo: JSON对象,获取的客户端标识信息 PushMess ...

  9. html5 push api,HTML5+ API Reference

    Push模块管理推送消息功能,可以实现在线.离线的消息推送,通过plus.push可获取推送消息管理对象. 方法: 对象: ClientInfo: JSON对象,获取的客户端标识信息 PushMess ...

最新文章

  1. 微软无解!Win10用户突然减少:装回Win7
  2. 未来属于人工智能工程师,但成功转型不容易
  3. TikTok英国市场你不能不知道的10大数据
  4. 被误读的博弈:谁才是大厂解除屏蔽的最终受益者?
  5. 进位赛迪百强榜,雨花区的“高质量”发展底座有多坚实?
  6. ITK:计算图像的绝对值
  7. java对象序列化克隆_Java8基础知识(三)对象克隆与序列化
  8. react学习(31)----react父传子
  9. wxpython wx listctrl_wxPython - ListCtrl列表排序
  10. 非标自动化企业前十名_企业动态 | 瑞弗机电:全链条拓展“非标定制” 量身定制自动化生产线...
  11. mysql canvert mongo_如何在MongoDB中的$match中使用聚合运算符(例如$year或$dayOfMonth)?...
  12. 剑指offer之合并有序链表
  13. mysql如何查询不等于_mysql查询不等于
  14. [R语言绘图]绘图样式设置(符号、线条、颜色、文本属性)
  15. SAS硬盘-神级高性能硬件盘点
  16. Unity动画 代码加载动画,可复用
  17. exls表格搜索快捷键_excel搜索快捷键 如何在excel里快速找到需要的信息
  18. R语言在逻辑回归中求R square R方
  19. JavaScript 销毁对象
  20. Java创建对象方式初谈

热门文章

  1. 用C#实现模拟双色球中奖程序 控制台应用程序
  2. C语言结构体指针强转
  3. c语言while将字符循环,C语言 while语句的用法详解
  4. 三维空间中平面的法向量计算(2)
  5. 写给想学和在学编程的你们,学习编程的7个好处
  6. 计算机专硕370什么水平,考研370分是什么概念 好考吗
  7. (转载)供电电路切换与锂电池充电电路设计
  8. NVIDIA GPU A100 Ampere(安培) 架构深度解析
  9. Java bad verson 错误
  10. eclipse- Web-app verson=2.5 调整将Dynamic Web Module3.0降为2.5