大海捞针 Skia(C++) 第 4 期:绘制基本图形
前言
本期将为大家介绍基本图形的画法,包括:圆、椭圆、矩形、圆角矩形。
关键词:图形、圆、椭圆、矩形、圆角、抗锯齿
案例
注意:接下来的案例都将使用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提供的方法即可。后期我们将带领大家运用所学的内容进行拓展。敬请期待!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)