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

CANoe从入门到精通“保姆级”教程(二)- 堪称全网“最全”系列

CANoe各功能区介绍;

车载控制器AutoSAR软件开发工程师 2万+

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

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

网络资源是无限的 1万+

大数据实时+离线项目架构----智慧物流大数据平台(超流行框架!)

智慧物流大数据平台 文章目录智慧物流大数据平台一、项目背景二、逻辑架构三、解决方案技术亮点:数据流转四、项目的技术选型4.1流式处理平台4.2 分布式计算平台4.3 海量数据存储框架软件版本总结 一、项目背景 本项目基于一家大型物流公司研发的智慧物流大数据平台。该物流公司是国内综合性快递、物流服务商,并在全国各地都有覆盖的网点。经过多年的积累、经营以及布局,拥有大规模的客户群,日订单达上千万。如此规模的业务数据量,传统的数据处理技术已经不能满足企业的经营分析需求。公司需要基于大数据技术构建数据中心,从而挖

weixin_48143996的博客 6431

OmniQuant:全方位校准实现大语言模型高效量化与移动端部署

模型量化是一种通过降低模型权重和激活值的数值精度来压缩模型大小、减少内存占用和计算开销的核心技术。其原理在于将高精度浮点数映射到低精度整数表示,从而在保持模型性能的同时,显著提升存储和计算效率。这项技术的价值在于,它使得大规模语言模型能够在消费级硬件和资源受限的移动设备上运行,极大地拓宽了AI应用场景。OmniQuant作为一项前沿的量化技术,通过引入可学习权重裁剪和可学习等价变换机制,实现了对权重分布不均匀和激活值异常值问题的协同优化,从而在极低的比特数下仍能保持优异的模型性能。本文深入探讨了OmniQu

weixin_30719711的博客 485

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

C++使用Skia前的准备

AquerKing的博客 1938

Tesseract OCR识别不准?手把手教你用PyAutoGUI提升自动点击脚本的准确率

本文针对Tesseract OCR在屏幕自动化中识别不准的问题,提供了一套完整的优化方案。通过PyAutoGUI精准截图、结合PIL和OpenCV进行图像预处理(如灰度化、对比度增强、自适应二值化),并调优Tesseract参数(如PSM模式、白名单),显著提升文本识别准确率。文章还介绍了结合模板匹配、构建容错循环等进阶技巧,帮助开发者打造高可靠性的自动点击脚本。

weixin_29093017的博客 544

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

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

AquerKing的博客 1102

[工作流节点24] 外部用户审批的实现方式:让客户、供应商也能参与流程决策

摘要: 明道云支持通过三种方式实现外部用户审批:1)外部表单审批(推荐方案),通过公开表单让外部用户提交审批意见并自动触发流程;2)链接参数审批,通过含参数的URL实现一键确认;3)API/Webhook审批,适用于系统集成场景。三种方案均无需外部用户登录,支持记录操作日志和安全审计。典型应用包括客户确认报价、供应商发货确认等,实现内外流程无缝衔接。建议根据业务复杂度选择:无代码需求用外部表单,轻量审批用链接参数,系统对接用Webhook。

每日出拳老爷子的博客 347

实战封神!YOLOv7 轻量化部署全攻略:ONNX格式转换+TensorRT极致加速(速度直接提升3-5倍,精度无损)

部署核心链路,这是YOLO系列部署的最优解,速度提升3~5倍,精度无损;ONNX是桥梁:解决模型兼容性问题,简化后能去掉冗余节点,是TensorRT加速的前提;TensorRT是核心:NVIDIA显卡的极致加速引擎,FP16量化是速度与精度的最优平衡,无需手动配置,一键开启;轻量化终极组合YOLOv7-tiny + 416尺寸 + TensorRT FP16,速度提升5~8倍,满足所有实时检测场景;避坑核心:转换参数必加,推理尺寸必须一致,engine文件显卡专属。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 308

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

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

weixin_34405354的博客 339

基于CNN-LSTM融合模型的环卫车动态称重算法研究:从频率感知到精准质量估计

摘要: 针对环卫车辆动态称重需求,本研究提出一种基于CNN-LSTM融合网络的频率分析方法。通过在实验室构建振动频率采集系统,获取不同载重下的结构响应数据,经MATLAB进行信号处理和特征提取后,建立频率-质量的非线性映射模型。实验表明,该算法在静态和模拟动态场景下平均绝对误差小于1.5%,显著优于传统方法,为环卫车智能化管理提供了高精度实时称重方案。 关键词: 动态称重;深度学习;频率分析;CNN-LSTM;MATLAB。

AI的内部世界的博客 374

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

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

weixin_34345753的博客 1079

【Unity大规模RTS/攻城战框架】Large Scale Combat System - RTS Sieges深度解析

本文介绍了Unity专业级大规模RTS战斗框架Large Scale Combat System(LSCS)。该系统通过Job System+Burst技术解决了万人级单位的性能问题,提供完整的RTS操作体系、动态阵型系统、战术AI和攻城战功能。其亮点包括可破坏城门、行走城墙、战术AI配置系统,支持URP渲染管线,适用于Total War风格的大规模兵团对战项目。LSCS不仅提供核心战斗系统,还包含UI、小地图等配套模块,是Unity中少有的专业级RTS解决方案,特别适合需要深度战术玩法和大规模战斗的开发者

2403_88403568的博客 1334

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Skia深入分析

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

hgl868的专栏 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

weixin_33853827的博客 2076

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

余额充值