C#调用skiasharp实现绘制并拖拽图形

本文介绍了如何在.NET的Winform项目中利用SkiaSharp库进行二维图形绘制,包括基本用法如安装SkiaSharp包、SKCanvas与GDI+的区别,以及如何实现圆形绘制和拖拽功能。
摘要由CSDN通过智能技术生成

  SkiaSharp是基于.net的跨平台二维图形库,封装的谷歌的Skia库,SkiaSharp支持在以下平台或运行时中使用,能够在图片中绘图,也提供控件在Winform、WPF等使用。本文学习skiasharp在Winform的基本用法,并参照参考文献5实现绘制并拖拽圆形的简单示例。
在这里插入图片描述
  VS2022中新建Winform项目,在Nuget包管理器中搜索并安装一下SkiaSharp包,安装完毕后,会在工具箱中出现SkaiSharp相关的控件,本文使用SKControl控件绘制图形。
在这里插入图片描述在这里插入图片描述
  使用GDI+绘制图形时,最重要的类为Graphics,其包含绘制图形、填充图形、坐标变换等操作,而在skiasharp中与之对应的类为SKCanvas(SKCanvas没有专门的填充函数,而是通过SKPaint类中的Style属性设置填充还是绘制轮廓),同时skiasharp中还定义了SKPoint、SKRect、SKFont 、SKColor 、SKImage等常用类型,与GDI+中的类型对应。
在这里插入图片描述
  回到本文的绘制并拖拽圆形的简单示例,需要再SKControl控件的PaintSurface事件中绘制图形(普通控件一般都是在paint事件绘图),该事件响应函数会传入SKPaintSurfaceEventArgs参数,其中的Surface.Canvas属性用于在控件中绘图。绘制圆形的函数圆形如下,与GDI+的画圆函数差异较大,其绘图效果如下图所示:

public void DrawCircle(float cx, float cy, float radius, SKPaint paint)

在这里插入图片描述

  最后是实现拖拽效果,主要处理SKControl控件的MouseDown、MouseMove、MouseUp事件,没有什么特殊之处,仅将PaintSurface事件处理函数列在下面:

private void skBall_PaintSurface(object sender, SkiaSharp.Views.Desktop.SKPaintSurfaceEventArgs e)
{
    e.Surface.Canvas.Clear();

    using var paint = new SKPaint
    {
        Color = SKColors.Blue,
        Style = SKPaintStyle.Fill,
        IsAntialias = true,
        StrokeWidth = 2
    };
    e.Surface.Canvas.DrawCircle(m_startP.X, m_startP.Y, 50, paint);

    if(m_isMoving)
    {
        paint.Style = SKPaintStyle.Stroke;
        e.Surface.Canvas.DrawCircle(m_movingP.X, m_movingP.Y, 50, paint);
    }
}

在这里插入图片描述

参考文献:
[1]https://github.com/mono/SkiaSharp
[2]https://learn.microsoft.com/en-us/dotnet/api/skiasharp?view=skiasharp-2.88
[3]https://blog.csdn.net/ken0online/article/details/132363856
[4]https://www.cnblogs.com/bigben0123/p/14984984.html
[5]https://www.jb51.net/article/257125.htm

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值