大海捞针 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

飞牛NAS挂载115网盘避坑指南:为什么你的大文件总是传输失败?

本文深入解析了在飞牛NAS上通过AList挂载115网盘时,大文件传输失败的深层原因,包括风控机制、网络协议及兼容性问题。文章提供了从基础排查到高阶优化的系统性解决方案,并建议采用Kopia分片备份等终极策略,以实现稳定可靠的云端数据流转。

weixin_29306011的博客 1695

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

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

网络资源是无限的 1万+

超大规模AI集群跨数据中心互联:Scale-Across技术实现与部署实践

分布式系统通过将计算任务分散到多个节点协同执行,实现算力的横向扩展。其核心原理在于网络通信、数据同步和资源调度机制的技术协同。在AI基础设施领域,分布式架构能有效突破单数据中心算力瓶颈,支撑万亿参数大模型训练。特别是面对长距离传输时延和带宽稳定性挑战,需要采用RDMA、确定性网络等关键技术。Scale-Across作为分布式系统的高级形态,通过跨地域多数据中心互联,构建逻辑统一的AI算力池,为超大规模AI训练和全球推理服务提供核心支撑。本文聚焦AI集群跨数据中心互联的技术路径,涵盖全栈优化、网络自治等实践方

chouxuyi9789的博客 400

告别裸机:在FreeRTOS上为STM32移植SOEM 1.4.0的完整指南

本文详细介绍了在FreeRTOS环境下为STM32H7系列芯片移植SOEM 1.4.0的完整指南,涵盖环境准备、任务架构设计、OSAL层适配及网络驱动优化等关键步骤。通过EtherCAT主站解决方案的实现,帮助开发者构建稳定可靠的工业自动化系统,提升实时通信性能。

weixin_33582311的博客 363

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

C++使用Skia前的准备

AquerKing的博客 1938

玩转RecyclerView | 实现子视图叠加 | 3D画廊效果 | 高级动效 | Android 3D坐标系介绍

之前写的一篇文章展示了RecyclerView实现的画廊效果,适用于专辑/图片/列表浏览效果。本篇文章阐述如何基于RecyclerView实现如下图所示的3D画廊效果。以下效果的重点在于实现子视图的图层叠加,滑动过程中的3D旋转效果较为简单。(1)无3D旋转效果图片(1)带3D旋转效果图片。

qq_38237224的博客 8157

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

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

AquerKing的博客 1102

【文献阅读:信道估计】Deep Residual Learning Meets OFDM Channel Estimation

基于深度学习的信道估计技术

weixin_43178683的博客 1755

yolov7目标追踪:基于自定义数据集完成检测

目标追踪包含两个阶段:(1)基于自定义数据集,训练yolo目标检测模型;(2)基于检测模型,将实时检测结果传递到StrongSORT追踪算法中,该算法在OSNet基础上结合运动和外观信息,可以跟踪yolo模型检测到的任何物体。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2306

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

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

weixin_34405354的博客 339

微信小程序逆向实战:从HTTPS抓包到API接口全解构

方案原理优点缺点方案一:使用低版本微信+系统代理微信7.0以下版本未强制不走代理操作简单容易被封号,无法使用新版小程序方案二:Hook SSL层(Xposed/Frida)动态Hook Java的TrustManager或系统的SSLContext,绕过证书校验灵活可控需要Root/越狱,技术门槛高方案三:VPN转发抓包(PacketCapture)利用Android VPNService将所有流量转发到本地代理无需Root,兼容性好部分机型存在性能问题。

2201_76125261的博客 268

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

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

weixin_34345753的博客 1079

5、自动化代码结构与运维系统的优化

本文探讨了自动化代码结构与运维系统的优化方法,涵盖审批流程的模块化设计、日志记录与工单系统的集成、通知方式的选择、错误处理的策略以及持续改进的实践。同时,深入分析了运维盲目性问题,通过故障案例揭示了关键指标缺失和日志未充分利用的弊端,提出了开发与运维角色转变的必要性。文章还介绍了如何生成有用的系统指标、建立良好的日志习惯以及实施日志聚合,以提升系统的可观测性和可靠性。最终通过总结和流程图展示了优化措施的核心要点,为构建高效、可靠的运维体系提供了指导。

pp12345的博客 71

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Skia深入分析

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

hgl868的专栏 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

weixin_33853827的博客 2076

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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、付费专栏及课程。

余额充值