大海捞针 Skia(C++) 第 4 期:绘制基本图形

Skia绘制代码分析 路径绘制尽管使用频率相对于图像绘制、文本绘制低,但却是非常重要的一个基本特性。所有不规则图形(椭圆、圆角矩形、三角形、简单的文字),最后都避不开路径绘制。 而且,若自己实现一个2D引擎,这块内容是很具有参考意义的,用OpenGL的话,图像采样等都很少关注了,对对坐标就好。但菱角、圆弧、曲线等如何绘制仍然是一个难题,这时就可以参考Skia中drawPath的实现。 由于涉及较多的图形学知识,本章 阅读详情

前言

本期将为大家介绍基本图形的画法,包括:圆、椭圆、矩形、圆角矩形。

关键词:图形、圆、椭圆、矩形、圆角、抗锯齿


案例

注意:接下来的案例都将使用PNG图像来存储查看绘制结果

##1. 圆的绘制
首先,根据几何知识我们知道,要想确定一个圆,我们需要知道其半径和圆心。因此,在绘制前,我们也需要知道这些参数。

drawCircle(SkPoint center, SkScalar radius,  const SkPaint &paint);

以上是SkCanvas为我们提供的方法。
第一个参数是SkPoint型,表示一个点

SkPoint point;
point.fX = 100;
point.fY = 100;

第二个参数是SkScalar型,需要我们给一个数值表示半径。

第三个参数是SkPaint型,用于描述画笔。

SkPaint paint;
paint.setAlpha(255);
paint.setARGB(255, 0, 0, 0);

各个参数已定,调用方法进行绘制。

canvas.drawCircle(point, (SkScalar)20, paint);

此时在D盘下你将看到test.png呈现如下内容:

锦上添花——抗锯齿

我们发现,这样画出来的圆显得十分粗糙。为了消除这种突兀感,我们可以使用抗锯齿。

paint.setAntiAlias(true);

在绘制前,我们可以调用setAntiAlias方法启用或关闭抗锯齿。true表示开启,false表示关闭。
效果如下:

2. 椭圆的绘制

同样,根据几何学知识,焦点、焦距、离心率可以确定一个椭圆,但对于计算机来说却过于复杂。因此,这里我们不采用常规方法画椭圆,而是用长轴、短轴框定一个矩形,再依照矩形绘制。SkCanvas为我们提供如下方法:

drawOval(const SkRect &oval, const SkPaint &paint);

第一个参数是SkRect型,表示一个矩形,便于我们再这个矩形范围内绘制椭圆。

SkRect ovalRect;
ovalRect.fLeft = 130;
ovalRect.fRight = 230;
ovalRect.fTop = 80;
ovalRect.fBottom = 120;

第二个参数同样用于描述画笔。
调用函数即可。

3. 矩形的绘制

完成了圆和椭圆的绘制,矩形自然不在话下。
SkCanvas提供方法:

drawRect(const SkRect &rect, const SkPaint &paint);

4. 圆角矩形的绘制

原理同矩形一致,只不过我们需要传入一个参数设置圆角。

drawRect(const SkRect &rect, SkScalar rx, SkScalar ry, const SkPaint &paint);

第一和第四个参数这里不做解释。
第二和第三个参数表示圆角。我们其实可以将圆角那一块区域近似看作四分之一个椭圆,那么,rx表示椭圆的长半轴,ry表示椭圆的短半轴。



至此,本期内容就结束了。基本图形的绘制其实并不难,我们只需要了解一些数学几何知识和Skia提供的方法即可。后期我们将带领大家运用所学的内容进行拓展。敬请期待!

skui:基于Skia的C ++ UI框架 立即下载

相关推荐

skia for windows 静态库

用vs2015编译的skia静态链接库,release模式 64位

大海捞针 Skia(C++) 第 3 期:绘制文本

Skia C++ 第三期

AquerKing的博客 1842

TSMaster实战:手把手教你用C小程序发送自定义CAN报文(附完整代码)

本文详细解析了如何使用TSMaster的C小程序功能实现自定义CAN报文发送,涵盖环境配置、DBC集成、按键触发等实战技巧。通过完整代码示例和高级调试方法,帮助汽车电子工程师快速掌握TSMaster在CAN总线通信中的灵活应用,提升开发效率。

weixin_29184371的博客 575

Skia简介以及在Windows下编译操作步骤

Skia是一个C++的开源2D向量图形处理函数库(Cairo是一个矢量库),包括字型、坐标转换、位图等等,相当于轻量级的Cairo,目前主要用于Google的Android和Chrome平台,Skia搭配OpenGL/ES与特定的硬件特征,强化显示的效果。另外,Skia是WebKit支持的众多图形平台之一,在WebKit的GraphicsContext.h/.c中有相关实现。 Android与C...

网络资源是无限的 1万+

【5G全网建设】Option3X和Option2模式建安市、兴城市和四水市核心网、承载网网络设计与部署

拓扑规划: Option 3X网络拓扑图规划 Option 2网络拓扑图规划 设备部署: 建安市核心网 建安市承载中心机房 建安市骨干汇聚机房 建安市3区汇聚机房 建安市C站点无线机房 兴城市核心网 兴城市承载中心机房 兴城市骨干汇聚机房 兴城市2区汇聚机房 兴城市B站点无线机房 数据配置: 建安市核心网 建安市承载中心机房 建安市骨干汇聚机房 建安市3区汇聚机房 建安市C站点无线机房 兴城市核心网 兴城市承载中心机房 兴城市骨干汇聚机房 兴城市2区汇聚机房 兴城市B站点无线机房 业务调试

weixin_67183034的博客 8866

RK3568开发板Debian系统屏幕旋转终极指南:从临时调整到永久设置

本文提供了RK3568开发板在Debian系统下实现屏幕旋转的完整解决方案。从使用xrandr命令进行临时调整,到修改X11配置文件实现永久设置,详细讲解了操作步骤与核心原理。指南还涵盖了多屏异显配置、触摸屏坐标校准等进阶技巧,帮助开发者彻底解决显示方向问题。

weixin_29181861的博客 390

大海捞针 Skia(C++) 第 1 期:Skia 环境搭建

C++使用Skia前的准备

AquerKing的博客 1938

ABB RobotStudio 和 S7-PLCSIM Advanced V5.0 搭建虚拟通信环境,实现 PLC 对机器人布尔量、数字量和模拟量的控制。

本教程详细介绍了如何利用ABB RobotStudio和S7-PLCSIM Advanced V5.0搭建虚拟通信环境,实现PLC对机器人的布尔量、数字量和模拟量控制。主要内容包括:在TIA Portal V20中配置PLC项目并编写通信程序;通过S7-PLCSIM Advanced创建虚拟PLC运行环境;在RobotStudio中设置机器人PROFINET通信;以及建立虚拟网络连接并进行功能测试。该方案适用于工业自动化虚拟调试,可显著降低现场调试风险。操作需注意软件版本兼容性、网络配置及信号映射准确性,最

CHUXUEZHE8210的博客 2518

大海捞针 Skia(C++) 第 2 期:“Hello, Skia!”

本期将带领大家完成最经典的程序——“Hello, Skia!图形库表现方式主要以图像为主,因此,我们将会以图像的形式完成第一个项目。

AquerKing的博客 1102

PCIe中ACS知识小记

虚拟机内部的访问数据显而易见是带的GPA地址。而目前几乎所有的PCIe 设备都带ACS control,所以它们可以单独assign给不同的VM,但是随之而来的就是即使两个GPU同时assign给同一个VM,由于ACS的存在,他们之间也不会有真正的物理层面的P2P访问。每一个TLP都自带一个address(寻址类TLP),同时每一个endpoint,PCIe switch都自带一段BIOS配置的地址空间范围,一旦这个TLP的address落入某个设备的地址范围,那么这个TLP就属于这个设备并消费。

Summer的博客 5078

shader多图叠加变换

shader Shader "Paint3D/AddTexture" { Properties { _MainTex ("Main Texture", 2D) = "white" {} _MainColor("Main Color", Color)=(1,1,1,1) _AddTex0 ("Texture0", 2D) = "white" {} _AddTex1 ("Texture1", 2D) = "white" {} .

李长江的博客 909

Android硬件加速源码解析:从Canvas到GPU的渲染全链路

在Android应用开发中,UI渲染性能是衡量用户体验的关键指标。传统软件渲染完全依赖CPU进行像素计算,在复杂动画或频繁更新时容易成为性能瓶颈。硬件加速通过重构渲染流水线,引入GPU并行计算能力,将绘制命令转化为GPU可执行的指令序列,实现了渲染效率的质的飞跃。其核心原理在于将绘制操作序列化为DisplayList,由独立的RenderThread驱动GPU执行,从而大幅降低主线程负载。这项技术为流畅滚动、复杂动画和实时交互提供了基础支撑,广泛应用于对性能要求严苛的移动应用场景。本文以Android硬件加

weixin_34405354的博客 339

Voxel Hashing技术解析:如何解决TSDF内存爆炸问题?

本文深入解析Voxel Hashing技术如何有效解决TSDF内存爆炸问题。通过动态内存分配和空间哈希函数设计,该技术将内存占用降低96.6%,同时保持高精度重建。文章详细介绍了GPU加速实现、现代系统演进及实践指南,为实时3D重建提供工程解决方案。

m2n3b4v5c6的博客 715

Skia深入分析1——skia上下文

前言: 断断续续跟Android的skia库打了两年交道,如今交接掉了,便写写关于skia的一些知识,也算了结一段职业生涯。 找了找网上关于skia的文章,基本上都过时了,讲得也不怎么深入。虽然Skia只是一个2D引擎,但其深度优化的算法、完善的渲染体系和精炼的代码框架,还是很值得借鉴的。 PS:文章所依据的代码为目前最...

weixin_34345753的博客 1079

Python 中 dpkt 库的详细使用指南(强大的 Python 数据包解析库)

dpkt 是一个功能强大的 Python 网络数据包解析库,支持解析和构造以太网、IP、TCP/UDP 等多种协议的数据包。其核心功能包括解析各层协议头部、读写 pcap 文件、构造自定义数据包及分析 HTTP 流量等。dpkt 提供简单易用的 API,适用于网络分析、安全研究和流量监控场景。优化技巧包括数据包过滤、批量处理和选择性解析以提高性能,常见问题如数据不完整或协议识别错误可通过异常处理和字段验证解决。典型应用场景涵盖协议分析、网络调试和自定义数据包生成。

数据知道的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Skia深入分析

一、渲染层级 从渲染流程上分,Skia可分为如下三个层级: 1、指令层:SkPicture、SkDeferredCanvas->SkCanvas 这一层决定需要执行哪些绘图操作,绘图操作的预变换矩阵,当前裁剪区域,绘图操作产生在哪些layer上,Layer的生成与合并。 2、解析层:SkBitmapDevice->SkDraw->SkScan、SkDraw1Glyph::Proc 这一层

hgl868的专栏 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Skia深入分析2——skia渲染架构

一、渲染层级从渲染流程上分,Skia可分为如下三个层级: 1、指令层:SkPicture、SkDeferredCanvas->SkCanvas 这一层决定需要执行哪些绘图操作,绘图操作的预变换矩阵,当前裁剪区域,绘图操作产生在哪些layer上,Layer的生成与合并。 2、解析层:SkBitmapDevice->SkDraw->SkS...

weixin_33853827的博客 2076

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

c++ 斜线平滑 锯齿_解答难题“游戏中的抗(反)锯齿是怎么一回事?”

在我们打开了一款游戏的画质设置里,有很多选项可以调节,比如粒子特效、高光、贴图材质、阴影、抗锯齿等等,那么你知道抗(反)锯齿是什么吗?它又有很多选项分支,每个选项都有什么作用呢?今天就来给大家简单讲讲,游戏的抗锯齿特效究竟是什么。当屏幕显示的一小部分放大之后的像素屏幕中的像素排列方式都是水平和垂直的,所以当屏幕显示斜线或者有弯曲的图像时,就会出现锯齿状的画面,这一点在分辨率越低时锯齿状越明显,因为...

weixin_31998371的博客 1626

skia 之canvas

canvas是skia的核心部分,skia的逻都是围绕skcanvas对象来组织管理的,通过skcanvas可以指定不同的渲染上下文、draw call(绘制命令)、以及绘制状态管理(如绘图矩阵、操作栈等) skcanvas的状态 skcanvas和 skpaint共同提供了sksurface和skbasedevice上绘制的状态,skcanvas保存了所有操作的堆栈,通过 save和restore这两个方法来管理skcanvas的操作状态信息。 Backend skcanvas是可以指定在特定的像素上.

揽月凡尘 3022

c++绘图框架

总体对比表格 框架 总体评价 主要特点 备注 QT 最新的C++开源框架,封装了图形QGraphics的常用操作,便于扩展。 开源,免费,跨平台 MFC 不便于扩展和维护,CDC画图功能齐全 经典的框架,已不再更新 SLMF 适合简单的图形绘制,支持旋转,平移等功能,适用于小游戏开发 skia 完整的2D图形库,可绘制文本,几何图形和图像 Cairo 完整的2D图形库,包含了 编辑、移动、缩放、路径合并 等功能 c++绘图框架 QGraphics 【重点

lvye1221的专栏 2281

浅析GDI和GDI+与SKIA

GDI 由于没有复杂的抗锯齿处理,绘图效率非常不错,但是同样的绘制质量不好。没有半透明的处理功能,在对界面要求不高而对性能要求比较高的应用程序里面使用比较多,比如股票软件。 GDI+ GDI的升级版本,Windows独立提供了一个GDIPlus.dll的动态库,具有跨语言特性,C++,C#,VB都可以使用。 API封装性也比较好,支持丰富的半透明处理功能和文字处理特效。 具备抗锯齿绘制的能力。同样的也有其弊端,主要表现在: 绘制性能低下,连续绘制1000张大图片CPU基本就扛不住了 部分API存在

lizfs_csdn的博客 1720

skia入门

SkCanvas canvas(*pSkBitmap); SkPaint paint; SkRect rect; SkPaint::Style oldStyle; //画矩形 // rect.setXYWH(100, 100, 200, 200); // paint.setColor(SK_ColorRED); // paint.setStrokeWidth(1); // ol

dc11223344的专栏 3924

Skia深入分析8——Skia的GPU绘图

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33734785的博客 1096

Windows平台下Skia使用技巧一

Windows平台下Skia使用技巧一 www.visual-gear.com原创技术文章 Windows平台下有两大绘图API,分别是GDI和GDI+ GDI 由于没有复杂的抗锯齿处理,绘图效率非常不错,但是同样的绘制质量不好。没有半透明的处理功能,在对界面要求不高而对性能要求比较高的应用程序里面使用比较多,比如股票软件。 GDI+ GDI的升级版本,Windows独立提供了一个G...

weixin_30699955的博客 1078
上一篇: 节外生枝 - Minecraft Fabric Mod 开发:第 1 期 开发环境与准备
下一篇: 节外生枝 - Minecraft Fabric Mod 开发:第 2 期 添加物品
AquerKing
博客等级 码龄7年 8粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值