skia draw

本文简要概述了Skia图形库的绘制过程,包括路径生成、光栅化、着色和颜色传递四个步骤。Skia的canvas.drawXX方法通过path generation、rasterizer、shading和transfer来完成图像绘制。在rasterizer阶段,使用mask图像确定像素位置,可通过no rasterizer或SkRasterizer创建mask。shading阶段涉及不同类型的shader进行颜色着色,如线性、环形、扫略梯度及混合shader。最后的transfer阶段涉及颜色过滤和混合模式。

最近终于有时间去看skia draw的一些过程,参考skia/gm和skia/samplecode里面的示例非常粗略的总结了一下skia的绘制过程,只能说建立一个概览吧。希望有熟悉skia的大神在不对之处可以帮忙指点。


skia的每次绘制都是由canvas.drawXX方法发起,经过path generation、rasterizer、shading和transfer四个步骤完成一张图的绘制。

Path generation

在skia绘制管线中,第一步工作就是要生成SkPah。所谓path,字面上讲是绘制路径,其实就是绘制形状。这部分工作可以分为三个阶段去完成:
第一阶段:初始化path。可以使用SkPath的moveTo(),lineTo(),conicTo(),quadto()等方法手动绘制线段、二次曲线等,以此来绘制物体的轮廓;也可以使用canvas的draw api来绘制矩形、椭圆等形状完成轮廓绘制。
第二阶段:为path添加效果。skia支持的效果有:添加线宽、corner、虚线、DiscretePath、1Dpath、2Dpath等。这部分可以参考pathEffect.cpp。
第三阶段:使用SkPath的setStyle()方法确定path的风格。
enum Style {
        kFill_Style,            //!< fill the geometry填充
        kStroke_Style,          //!< stroke the geometry绘制轮廓
        kStrokeAndFill_Style,   //!< fill and stroke the geometry
    };

Rasterizer

生成path之后的工作就是要去rasterizer。skia中的rasterizer主要是确定像素要画在哪,这通过使用一个mask图像来完成。mask图像实际上是一个只有alpha通道的灰度图。mask图像可以决定每个像素是全透明、不透明还是部分透明。

可以使用两个方法生成mask:

(1)no rasterizer

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]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值