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. 外卖流量红利期已过:正从补贴战进入AI赛道
  2. Vcenter5.5安装部署:[2]web client的安装
  3. Android蓝牙串口通讯【转】
  4. .net 集合分成几个等数量集合_巧用数学游戏,帮助幼儿轻松掌握12种数量关系!...
  5. 双剑合璧————Spring Boot + Mybatis Plus
  6. BZOJ 3674 可持久化并查集
  7. 关于PHP页面显示乱码问题的解决
  8. rtpengine集群_ubuntu 安装 rtpengine
  9. 关于Android 11(R)适配指南
  10. 《道德经》与 (更新中)
  11. 7款最好用的图片无损,视频无损压缩软件
  12. 微软产品大升级:Surface Pro 6、Studio 2、Laptop 2 重磅来袭
  13. 目前见到的最傻瓜全面的STRUTS入门教程^_^
  14. 梦开始的地方 —— C语言数据在内存中的存储(整形+浮点型)
  15. BlueTooth: 无线技术之争谁将胜出 WiFi、蓝牙还是NFC?
  16. ffpmpeg 音量_有画面无声音 · Issue #2729 · bilibili/ijkplayer · GitHub
  17. handle与多线程
  18. maven基础:mvn命令常用参数整理;如:-am构建指定模块,同时构建指定模块依赖的其他模块
  19. 网络 | NAT、SNAT、DNAT
  20. educoder C++实战训练

热门文章

  1. python实现回响_Python的变化音调的WAV文件
  2. 2022-03-大脑与认知科学-台湾交通大学-黃植懋
  3. 爬虫-Scrapy (十) 搭建ip代理池
  4. 携手送真情,助残献爱心
  5. 43.HTML--a标签之mailto邮箱属性用法
  6. ts文件到js文件的转换
  7. 零基础学习xlwings,看这篇文章就够了
  8. Java8 新特性实战
  9. 笔记-统计学习方法-第一章01
  10. 计算机专业留学生回国找工作容易吗,留学生归国后一般都找什么工作?