当前位置: 首页 > news >正文

C#基于SkiaSharp实现印章管理(4)

  前几篇文章实现了绘制不同外形印章的功能,印章内部一般包含圆形、线条等形状,有些印章内部还有五角星,然后就是各种样式的文字。本文实现在印章内部绘制圆形、线条、矩形、椭圆等四种形状。
  定义FigureType枚举记录印章内部形状,同时定义DrawMode枚举形状绘制方式(边框或底色,暂不处理绘制边框+底色的情况)。

public enum FigureType
{Rect=0,Line=1,Circle = 2,Oval = 3,Text=4
}public enum DrawMode
{Border=0,BackGround=1
}

  定义SealElement类型保存不同形状所需的各类参数,主要包括:
  1)线条:StartPoint 、EndPoint 记录端点坐标,没有底色,仅需按线宽和颜色绘制直线即可;
  2)矩形:StartPoint记录左上角坐标,EndPoint记录矩形宽和高;
  3)圆形:StartPoint记录中心点坐标,EndPoint的X坐标记录半径;
  4)椭圆:StartPoint记录中心点坐标,EndPoint的X坐标记录x方向半径,Y坐标记录y方向半径。
  除线条之外,以边框形式绘制其它形状,计算尺寸时都需要考虑线宽。

public class SealElement
{public FigureType FigureType { get; set; } = FigureType.Rect;/// <summary>/// 印章背景色,默认白色/// </summary>public SKColor FigureBgColor { get; set; } = SKColors.White;/// <summary>/// 形状起始位置,不同形状保存的值意义不同/// </summary>public SKPoint StartPoint { get; set; } = new SKPoint(0, 0);/// <summary>/// 形状结束位置,不同形状保存的值意义不同/// </summary>public SKPoint EndPoint { get; set; } = new SKPoint(0, 0);/// <summary>/// 形状边框宽度/// </summary>public float FigureBorderWidth { get; set; } = 1;/// <summary>/// 印章边框,默认红色/// </summary>public SKColor FigureBorderColor { get; set; } = SKColors.Red;/// <summary>/// 形状绘制模式/// </summary>public DrawMode DrawMode { get; set; } = DrawMode.Border;
}

  编写维护线条、矩形、圆形、椭圆形状的属性编辑窗口,如下图所示:
在这里插入图片描述
  调整印章设计主界面,在菜单栏增加新建线条、矩形、圆形、椭圆菜单,在窗口右侧增加列表显示在印章中添加的形状列表,单击某一行会在窗口中通过变粗或变色显示选中形状。双击某一行则为编辑形状。
  使用的绘图函数还是SkiaSharp中SKCanvas的DrawLine、DrawRect、DrawCircle、DrawOval等,在此不再赘述。最后是程序运行效果,如下图所示:

在这里插入图片描述
在这里插入图片描述

参考文献:
[1]https://learn.microsoft.com/zh-cn/dotnet/api/skiasharp?view=skiasharp-2.88

http://www.lryc.cn/news/404823.html

相关文章:

  • Vue全家桶 - pinia 的理解和学习2(Pinia 核心概念的插件、组件外的 Store 和 服务器渲染(SSR))
  • 数学建模(6)——预测类模型目录
  • 安卓刷入系统证书
  • 中科亿海微信号采集核心板在振动采集场景中的应用
  • `panic` 是 Go 语言中用来表示发生了严重错误的一种机制
  • 【BUG】已解决:requests.exceptions.ProxyError: HTTPSConnectionPool
  • Python实现招聘数据采集 ,并做可视化分析
  • ES中的数据类型学习之Aggregate metric(聚合计算)
  • 看准JS逆向案例:webpack逆向解析
  • 【C语言】 利用栈完成十进制转二进制(分文件编译,堆区申请空间malloc)
  • 如何解决ChromeDriver 126找不到chromedriver.exe问题
  • Anaconda下安装配置Jupyter
  • 蓝队黑名单IP解封提取脚本
  • 共享充电桩语音ic方案,展现它的“说话”的能力
  • ARM 单片机裸机任务调度框架
  • .Net 8 控制台程序部署(Linux篇)
  • LeetCode:x的平方根(C语言)
  • 深入浅出WebRTC—DelayBasedBwe
  • JAVA开发工具IDEA如何连接操作数据库
  • 简化AI模型:PyTorch量化技术在边缘计算中的应用
  • 拥抱AI时代:解锁Prompt技术的无限潜力与深远影响
  • 第123天:内网安全-域防火墙入站出站规则不出网隧道上线组策略对象同步
  • 博客建站4 - ssh远程连接服务器
  • MySQL--索引(3)
  • sql_exporter通过sql收集业务数据并通过prometheus+grafana展示
  • pytorch 笔记:torch.optim.Adam
  • 开源AI智能名片小程序:深度剖析体验优化策略,激活小程序生命力的运营之道
  • ML.Net 学习之使用经过训练的模型进行预测
  • 为什么 centos 下使用 tree 命令看不见 .env 文件
  • 数据库基础与性能概述及相关术语