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

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

  印章中的文本主要分为两种:1)从左向右水平绘制的文本;2)沿指定路径绘制的文本。前者使用SKCanvas的DrawText绘制文本,后者则使用SKCanvas的DrawTextOnPath绘制文本。
  针对上述情况,调整SealElement类型定义,增加绘制文本所需的属性,主要增加以下属性。路径形状主要是矩形、圆形和椭圆,使用SealElement类的StartPoint、EndPoint属性记录形状位置和尺寸信息。

public class SealElement
{....../// <summary>/// 文本内容/// </summary>public string Content { get; set; } = string.Empty;/// <summary>/// 字体名称/// </summary>public string FontName { get; set; } = "宋体";/// <summary>/// 字体大小/// </summary>public float FontSize { get; set; } = 12;/// <summary>/// 字体颜色/// </summary>public SKColor FontColor { get; set; } = SKColors.Red;/// <summary>/// 文本是否加粗/// </summary>public bool IsBoldFont { get;set; } = false;/// <summary>/// 文本起始位置/// </summary>public SKPoint FontStartPoint { get; set; } = new SKPoint(0, 0);/// <summary>/// 是否沿路径绘制文本/// </summary>public bool IsAlongPath { get; set; } = false;/// <summary>/// 路径形状/// </summary>public FigureType PathType { get; set; } = FigureType.Circle;/// <summary>/// 文本距离形状起始点的偏移量/// </summary>public SKPoint Offset { get; set; } = new SKPoint(0, 0);
}

  创建“新建文本”窗口,根据文本绘制需要设置相应的属性框,如下图所示:
在这里插入图片描述
  感觉设置字体方面没有GDI+方便,同时SKPaint的Style属性应设置为Fill或者StrokeAndFill,设置为Stroke的话绘制的是文本边框,加粗效果不明显。绘制文本的主要代码如下所示。

skPaint.Color = element.FontColor;
skPaint.Typeface= SKTypeface.FromFamilyName(element.FontName,element.IsBoldFont?SKTypefaceStyle.Bold: SKTypefaceStyle.Normal);
skPaint.TextSize= element.FontSize;
skPaint.IsAntialias = true;
skPaint.StrokeWidth = 1;
skPaint.Style = SKPaintStyle.Fill;if (element.IsAlongPath)
{textPath= new SKPath();switch(element.PathType){case FigureType.Rect:textPath.AddRect(new SKRect(unitSize * element.StartPoint.X,unitSize * element.StartPoint.Y,unitSize * (element.StartPoint.X+element.EndPoint.X),unitSize *(element.StartPoint.Y+element.EndPoint.Y)));break;case FigureType.Circle:textPath.AddCircle(unitSize * element.StartPoint.X,unitSize * element.StartPoint.Y,unitSize * element.EndPoint.X);break;case FigureType.Oval:textPath.AddOval(new SKRect(unitSize * element.StartPoint.X,unitSize * element.StartPoint.Y,unitSize * (element.StartPoint.X + element.EndPoint.X),unitSize * (element.StartPoint.Y + element.EndPoint.Y)));break;}canvas.DrawTextOnPath(element.Content, textPath, unitSize * element.Offset.X, unitSize * element.Offset.Y, skPaint);
}
else
{canvas.DrawText(element.Content, unitSize * element.FontStartPoint.X, unitSize * element.FontStartPoint.Y, skPaint);
}

  程序的运行效果如下图所示。直接绘制文本的效果还可以,但是沿路径绘制文本的效果一般,暂不清楚是设置的问题还是代码没有写对,后续还得继续完善沿路径绘制文本功能。
在这里插入图片描述
在这里插入图片描述

参考文献:
[1]https://learn.microsoft.com/zh-cn/dotnet/api/skiasharp?view=skiasharp-2.88
[2]https://www.cnblogs.com/bhnian/p/16343557.html
[3]https://www.jb51.net/html5/676291.html
[4]https://blog.csdn.net/L_Shaker/article/details/127313457

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 计算机网络 --- 初识协议
  • windows 使用wsl安装docker
  • POD内的容器之间的资源共享
  • CLUSTERDOWN Hash slot not served问题复现
  • 【隐私计算】Paillier半同态加密算法
  • node前端开发基本设置
  • rust GUI框架Tauri入门——基于vanilla.js
  • 【C语言】联合体枚举的讲解
  • 02请求响应(简单参数)
  • Java学习Day42:骑龙救!(springMVC)
  • PostMan使用变量
  • 在mac中如何使python3作为默认版本
  • v-for循环中使用‘v-model‘ directives cannot update the iteration variable itself
  • JavaSE基础——第三章 运算符
  • 如何在webots中搭建一个履带机器人
  • ES6指北【2】—— 箭头函数
  • AWS实战 - 利用IAM对S3做访问控制
  • create-react-app做的留言板
  • CSS实用技巧
  • Java Agent 学习笔记
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • java中具有继承关系的类及其对象初始化顺序
  • mysql_config not found
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • vue-loader 源码解析系列之 selector
  • webpack入门学习手记(二)
  • 爱情 北京女病人
  • 计算机在识别图像时“看到”了什么?
  • 驱动程序原理
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 通过git安装npm私有模块
  • 我感觉这是史上最牛的防sql注入方法类
  • RDS-Mysql 物理备份恢复到本地数据库上
  • scrapy中间件源码分析及常用中间件大全
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ###C语言程序设计-----C语言学习(3)#
  • #《AI中文版》V3 第 1 章 概述
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (13)DroneCAN 适配器节点(一)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (分类)KNN算法- 参数调优
  • (三)mysql_MYSQL(三)
  • (四)汇编语言——简单程序
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (小白学Java)Java简介和基本配置
  • (一)Java算法:二分查找
  • (转) Face-Resources
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)h264中avc和flv数据的解析
  • (转)一些感悟
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .gitattributes 文件