【SkiaSharp绘图02】从绘制和填充圆开始

准备工作

【SkiaSharp绘图】系列文章的代码都是基于在窗体中拖入一个SkiaSharp.Views.Desktop.SKGLControl控件并平铺于窗体上(有需要的可以查看【SkiaSharp绘图01】使用SkiaSharp绘制Hello World一文),所有绘制代码都是在SKGLControl的PaintSurface事件中执行。
本系列示例,方法使用统一前缀“OnPaintSurface”命名,方便通过反射后自动将所有示例函数列举到窗体上方中的Combox中,通过选择切换内容,可执行不同示例代码。实际测试时,只需要复制相关代码段即可。
System.ComponentModel.Description的内容是为方便反射时函数说明用。

从绘制和填充圆开始

  1. 在SKGLControl的PaintSurface事件中实现绘制代码
  2. 获取SkiaSharp.Views.Desktop.SKPaintGLSurfaceEventArgs参数e的e.Surface.Canvas对象,所有绘制动作都在该对象上实现
  3. 获取e.Info对象,用于后续用于获取画布的尺寸
  4. 设置背景色为白色(默认是黑色的)
  5. 定义一个半透红色、宽度为21像素、只描边的SKPaint对象
  6. 在画布中心处绘制一个半径为100像素的圆
  7. 修改SKPaint对象的描边填充属性为填充,并将颜色改为半透明的绿色。
  8. 再次绘制填充圆。
  9. 留意边上重叠部分。
/// <summary>
/// 绘制圆并填充圆
/// </summary>
/// <param name="e"></param>
[System.ComponentModel.Description("绘制圆并填充圆")]
public void OnPaintSurface02_01(object sender, SkiaSharp.Views.Desktop.SKPaintGLSurfaceEventArgs e)
{
    var canvas = e.Surface.Canvas;
    var info = e.Info;
    //将背景置为白色
    canvas.Clear(SKColors.White);
    //定义画刷
    using (var skPaint = new SKPaint()
            {
                Style = SKPaintStyle.Stroke,//只描边
                Color = new SKColor(255,0,0,127),//半透红色
                StrokeWidth = 21//描边宽度(像素)
            })
    {
        //画布中心
        var cx = info.Width / 2;
        var cy = info.Height / 2;
        canvas.DrawCircle(cx, cy, 100,skPaint);
        skPaint.Style = SKPaintStyle.Fill;//填充
        skPaint.Color = new SKColor(0, 255, 0, 127);//半透绿色
        canvas.DrawCircle(cx, cy, 100, skPaint);
    }
}

效果如下图:
Skiap绘制并填充圆

与Window GDI+的差异

在进行简单的SkiaPaint绘制图像后,可以与Windows GDI+图像绘制有着不同的差异:

  1. 绘制对象

    • SkiaSharp 使用 SKCanvas 进行绘制,而 GDI+ 使用 Graphics
  2. 绘制方式

    • 在 SkiaSharp 中,绘制轮廓和填充使用的是相同的绘制方法(如DrawXXX),但通过设置 SKPaintStyle 属性来控制描边、填充还是同时绘制。
    • 在 GDI+ 中,通常使用 DrawXX 来绘制描边,而使用 FillXX 等方法来进行填充。描边一般用Pen,填充用Brush
  3. 颜色表示

    • SkiaSharp 使用 SKColor 表示颜色,而 GDI+ 使用 System.Drawing.Color。它们之间可以通过 ToSKColor()ToDrawingColor() 方法进行互相转换。
  4. 绘制函数的差异

    • 两个的函数不太一致,如DrawCircleDrawOval,而GDI+只用DrawEllipse,不知你更喜欢哪种风格呢?
  5. 其他差异

    • 随着SkiaSharp深入,应该会有更多的差异。总得一点是,SkiaSharp在功能、性能和跨平台支持方面有着明显优势,特别是对于高性能和复杂图形的处理。

    希望在未来的日子里,可以整理一份SkiaSharp与Windows GDI+之间的对象对比表,方便从GDI+迁移到SkiaSharp上实现图形处理。

SkiaSharp绘图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图南科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值