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

devtools/2024/11/15 0:34:20/

  SkiaSharp是基于.net的跨平台二维图形库,封装的谷歌的Skia库,SkiaSharp支持在以下平台或运行时中使用,能够在图片中绘图,也提供控件在Winform、WPF等使用。本文学习skiasharpWinform的基本用法,并参照参考文献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


http://www.ppmy.cn/devtools/26789.html

相关文章

【数据结构】图的应用(最小生成树、拓扑排序、最短路径等)

文章目录 最小生成树概念Prim算法基于邻接表的Prim算法:基于邻接矩阵的Prim算法 Kruskal算法基于邻接表的Kruskal算法:基于邻接矩阵的Kruskal算法: 有向无环图及其应用拓扑排序概念基于邻接表的拓扑排序算法:基于邻接矩阵的拓扑排…

ubuntu系统搭建pytorch环境详细步骤【笔记】

实践设备:华硕FX-PRO(NVIDIA GeForce GTX 960M) 搭建PyTorch环境的详细步骤如下: 1.安装Ubuntu系统: 下载Ubuntu的镜像文件并制作启动盘。将启动盘插入计算机,启动计算机并按照提示安装Ubuntu系统。 2.…

mac 初始环境搭建

首先是jdk 我用的是1.8版本 去oracle官网。直接安装。1.8 的jdk。 这是链接。 一、准备安装包 苹果的mac book目前常见的有两种芯片的 一种是intel芯片的,一种是Apple Silicon的。为了更好的体现不同芯片的性能,各种开发工具包给出了不同的实现&am…

【介绍下Unity编辑器扩展】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

十一、大模型-Semantic Kernel与 LangChain 的对比

Semantic Kernel 与 LangChain 的对比 Semantic Kernel 和 LangChain 都是用于开发基于大型语言模型(LLM)的应用程序的框架,但它们各有特点和优势。 基本概念和目标 Semantic Kernel 是一个由微软开发的轻量级 SDK,旨在帮助开发…

Spark Structured Streaming 分流或双写多表 / 多数据源(Multi Sinks / Writes)

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

BPMN2.0 事件 - 基本概念

事件Event是BPMN2.0执行语义中重要的概念,是流程运行过程中发生的对象,会影响流程的流转。 从不同的角度来看,事件有不同的分类。从流程生命周期角度定义,事件可以分为开始,中间,结束三种类型,从事件的动作处理,触发方式角度定义,事件又分为捕获,抛出事件。还有很多…

聊聊 ASP.NET Core 中间件(一):一个简单的中间件例子

前言:什么是中间件 服务器在收到 HTTP 请求后会对用户的请求进行一系列的处理,比如检查请求的身份验证信息、处理请求报文头、检查是否存在对应的服务器端响应缓存、找到和请求对应的控制器类中的操作方法等,当控制器类中的操作方法执行完成…