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

news/2024/5/18 19:37:24

  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


http://www.mrgr.cn/p/08462157

相关文章

DC-5-screen提权

Vulnhub简介 Vulnhub是一个提供了很多漏洞环境的靶场平台,其中的环境基本上都是做好的虚拟机镜像文件,需要使用VMware或者是VirtualBox运行。每个镜像会有破解的目标,大多是Boot2root,从启动虚拟机到获取操作系统的root权限和查看flag。 靶场部署 vulnhub官网:https://www…

Kubernetes 弃用Docker后 Kubelet切换到Containerd

containerd 是一个高级容器运行时,又名 容器管理器。简单来说,它是一个守护进程,在单个主机上管理完整的容器生命周期:创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等。 containerd 旨在轻松嵌入到更大的系统中。Docke…

【多模态大模型】AI对视频内容解析问答

文章目录 1. 项目背景2. 直接对视频进行解析进行AI问答:MiniGPT4-Video2.1 MiniGPT4-Video效果 3. 对视频抽帧为图片再进行AI问答3.1 视频抽帧3.2 图片AI问答3.2.1 阿里通义千问大模型 Qwen-vl-plus3.2.2 Moonshot 1. 项目背景 最近在做一个项目,需要使用AI技术对视…

洛谷P2375 [NOI2014] 动物园

动物园 题目描述输入格式输出格式输入输出样例 输入 3 aaaaa ab abcababc 输出 36 1 32 开始时都没看出来这是kmp板子题 先看看AC代码吧 #include<bits/stdc++.h> #define ll long long using namespace std; const int maxn=1e6+10; const int mod=1e9+7; char a[maxn];…

List的remove()方法详解

https://blog.csdn.net/anxin_hw/article/details/128312846 一、错误使用场景 1、普通for循环遍历List删除指定元素,list.remove(index) 示例:将姓张的名字移除掉List<String> nameList = new ArrayList<>(Arrays.asList("张三", "李四", &…

本地大语言模型LLM的高效运行专家 | Ollama

Ollama简介 Ollama是一个开源的大型语言模型服务工具&#xff0c;它帮助用户快速在本地运行大模型。通过简单的安装指令&#xff0c;用户可以执行一条命令就在本地运行开源大型语言模型&#xff0c;如Llama 2。Ollama极大地简化了在Docker容器内部署和管理LLM的过程&#xff0…

软考备考1

【BV1Qc411G7fB】考试形式 考45分就行上午-计算机与软件工程知识-150分钟,笔试,选择题-75分还有5分时专业英语,,一篇文章挖5个空下午-软件设计-150分钟-笔试-简答题-75分三个复习阶段考点理论学习——建立理论框架 题型全覆盖——考试全部题型了然于胸 真题强化训练——适应…

AWVS

工具说明 Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的Web网络漏洞扫描工具,他通过网络爬虫测试你的网站安全,检测流行安全漏洞。 AWVS可以通过SQL注入攻击、XSS(跨站脚本攻击)、目录遍历、代码执行等漏洞来审核Web应用程序的安全性并输出扫描报告。相对于…

需求改进系统设计

这个作业属于哪个课程 <班级的链接>这个作业要求在哪里 <作业要求的链接>这个作业的目标 <体验项目的流程>1、需求改进 描述改进2、系统设计3、任务分配 由于团队只有一人,所以灵活分配时间 4、测试计划 测试是否可以正常登录 测试是否可以修改密码 测试图书…

低代码技术在构建质量管理系统中的应用与优势

引言 在当今快节奏的商业环境中&#xff0c;高效的质量管理系统对于组织的成功至关重要。质量管理系统帮助组织确保产品或服务符合客户的期望、符合法规标准&#xff0c;并持续改进以满足不断变化的需求。与此同时&#xff0c;随着技术的不断进步&#xff0c;低代码技术作为一…

免费开源语音克隆-GPT-SoVITS-WebUI只需 5 秒的声音样本

语音克隆-GPT-SoVITS-WebUI 强大的少样本语音转换与语音合成Web用户界面。 功能&#xff1a; 零样本文本到语音&#xff08;TTS&#xff09;&#xff1a; 输入 5 秒的声音样本&#xff0c;即刻体验文本到语音转换。 少样本 TTS&#xff1a; 仅需 1 分钟的训练数据即可微调模型…

物联网实战--平台篇之(二)基础搭建

目录 一、Qt工程创建 二、数据库知识 三、通信协议 四、名词定义 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html 一、Qt工程…

树状数组(二维偏序)

题目链接 https://leetcode.cn/problems/maximum-sum-queries/description/ 题目大意题目思路 二维偏序问题 -> 一维排序,一维树状数组! 题目代码 class Solution { public:int sz;vector<int> tr;int lowbit(int x){return x & -x;}void update(int x,int k){f…

《MySQL对数据库中表的结构的操作》

文章目录 一、建表二、查看表结构所有能查看到数据库&#xff0c;表的操作痕迹的本质都是服务器保存下来了这些操作记录。 三、修改表1.改表名字2.添加表记录3.添加表的更多字段4.修改表的字段5. 删除表的字段 总结 以下的数据库表的操作全是基于user_db这个数据库操作的&#…

游戏排名算法:Elo、Glicko、TrueSkill

Elo rating system Elo等级分制度(英语:Elo rating system)是指由匈牙利裔美国物理学家Arpad Elo创建的一个衡量各类对弈活动水平的评价方法,是当今对弈水平评估公认的权威标准。 两个选手(player)在排名系统的不同,可以用来预测比赛结果。两个具有相同排名(rating)的…

Go Web 开发【Gin 框架快速开发】

1、Gin Web 快速开发 1.1、环境准备 1.1.1、导入 gin 依赖 这里就叫 gin 依赖了&#xff0c;在 Goland 命令行中输入下面的命令&#xff1a; go get -u github.com/gin-gonic/gin 1.1.2、设置代理 如果下载失败&#xff0c;最好设置一下代理&#xff0c;在 cmd 命令行中输…

pytho爬取南京房源成交价信息并导入到excel

# encoding: utf-8 # File_name: import requests from bs4 import BeautifulSoup import xlrd #导入xlrd库 import pandas as pd import openpyxl# 定义函数来获取南京最新的二手房房子成交价 def get_nanjing_latest_second_hand_prices():cookies {select_city: 320100,li…

jenkins 部署springboot 项目

文章目录 持续集成指定tag发布 基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成 基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署 持续集成 为了让程序代码可以自动推送到测试环境基于Docker服务运行…

lxc容器没有cron的解决办法

简介 我经常使用cron定时脚本来更新我的cloudflare ddns。 最近想着把pve上跑着的fedora,切换到lxc容器试试。 结果就遇到了没有cron的尴尬。 安装 dnf search crontab dnf install cronatbs启动 systemctl start crond 自启动 systemctl enable crond 小结 主要就是search找一…

亚马逊云科技AWS将推出数据工程师全新认证(有资料)

AWS认证体系最近更新&#xff0c;在原有12张的基础上&#xff0c;将在2023年11月27日添加第13张&#xff0c;数据工程师助理级认证(Data Engineer Associate)&#xff0c;并且在2024/1/12前半价(省75刀&#xff1d;544人民币。 原有的数据分析专家级认证(Data Analytics Specia…