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

embedded/2024/12/22 16:32:13/

  除了文本,印章设计模块的绘图功能已经差不多了。在实现文本绘制之前(主要是文本绘制相对比较麻烦),本文先实现将印章导出为pdf或图片的功能。
  不论是在控件中绘制,还是在图片或pdf文件中绘制印章,对SkiaSharp而言都是获取SKCanvas对象,然后开始画图。因此需要重构之前直接写在SKControl控件的PaintSurface事件中的绘图函数,定义如下函数供不同形式的绘图需要。

void DrawSeal(SKCanvas canvas, float unitSize)

  针对图片而言,创建SKBitmap对象绘图,然后基于其创建SKCanvas对象绘图,主要代码如下所示。这里有个问题还没有处理,计算单位尺寸的时候使用的SKControl控件的dpi,暂时不清楚如何获取或者设置图片的dpi。

Func<float, int, float> unitConverter = m_currSeal.UnitType == UnitType.Pixel ? CommonFunction.Pixel2Pixel : CommonFunction.MM2Pixel; 
float unitSize = unitConverter(1, skBoard.DeviceDpi);
using SKBitmap bitmap = new SKBitmap(Convert.ToInt32(unitSize * m_currSeal.Width), Convert.ToInt32(unitSize * m_currSeal.Height));DrawSeal(new SKCanvas(bitmap), unitSize);
bitmap.ToBitmap().Save(saveFileDialog.FileName);

  针对pdf而言,主要使用SKDocument.CreatePdf函数创建pdf文档,然后调用SKDocument. BeginPage创建绘图对象,这里pdf采用的SKDocument的默认dpi(72),也可以通过SKDocumentPdfMetadata对象在CreatePdf函数时指定dpi,主要代码如下。

using SKDocument doc = SKDocument.CreatePdf(saveFileDialog.FileName);
Func<float, int, float> unitConverter = m_currSeal.UnitType == UnitType.Pixel ? CommonFunction.Pixel2Pixel : CommonFunction.MM2Pixel; ;float unitSize = unitConverter(1, (int)SKDocument.DefaultRasterDpi);
SKCanvas canvas = doc.BeginPage(unitSize * m_currSeal.Width, unitSize * m_currSeal.Height);
DrawSeal(canvas, unitSize);
doc.EndPage();
doc.Close();

  最后是程序运行效果及导入的pdf和图片效果。
在这里插入图片描述
在这里插入图片描述

参考文献:
[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
[5]https://www.cnblogs.com/sunnytrudeau/p/15570085.html


http://www.ppmy.cn/embedded/97932.html

相关文章

5.1、生成树协议stp

一、广播风暴 广播风暴&#xff08;Broadcast Storm&#xff09;是网络中的一种现象&#xff0c;通常发生在局域网&#xff08;LAN&#xff09;中。当网络中的交换机或路由器配置错误&#xff0c;或环路没有被有效控制时&#xff0c;广播帧会在网络中无限制地传播&#xff0c;…

安全基础学习-SM4加密算法

SM4 是一种中国国家密码标准(GB/T 32907-2016)中定义的分组加密算法,又称为“中国商用密码算法SM4”。它是由中国国家密码管理局发布的,并广泛应用于金融、电子商务和其他需要数据加密的场景。 1、SM4 算法概述 SM4 是一种对称加密算法,意味着加密和解密使用相同的密钥。…

深度学习,创新点,模型改进

深度学习 添加创新点 ①在现有模型上添加自己的创新点 ②或者混合多个模型等等 ③提供创新点 添加各种注意力机制&#xff0c;各种模型block。 机器学习&#xff0c;目标检测&#xff0c;目标识别&#xff0c;语义分割&#xff0c;GAN&#xff0c; CNN等(只要是深度学习均可) 编…

软件运维实施维保方案(Doc完整版原件)

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产…

PHP初级栈进阶篇

小刘小刘&#xff0c;下雨不愁 (收藏&#xff0c;关注不迷路) 这里我会更新一些php进阶知识点&#xff0c;新手想再进一步可以有个方向&#xff0c;也有个知识图谱的普及 当然本篇不止写技术 会涉及一些进阶路线 我也是在这里积累&#xff0c;希望和同行者一起进步为后来者…

运维学习————Redis在Linux(Centos7)单机部署和集群部署

目录 一、单机部署 1、软件准备 2、安装配置 3、启动Redis 二、Redis集群 2.1、主从模式 2.1.1、作用 2.1.2、规划图 2.1.3、具体配置 准备工作 主从配置 启动测试 2.1.4、主从复制原理 主从全量复制 主从增量同步(slave重启或后期数据变化) 2.1.5、缺点 2.2、哨兵…

一文学会本地部署可视化应用JSONCrack并配置公网地址实现远程协作

文章目录 前言1. Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 前言 本文主要介绍如何在Linux环境使用Docker安装数据可视化工具JSONCrack&#xff0c;并结合cpolar内网穿透工具实现团队在…

【Redis】Linux CentOS Redis 的安装—(一)

Redis 一、获取源二、解压编译 一、获取源 //redis-stable是最新稳定版 wget https://download.redis.io/redis-stable.tar.gz二、解压编译 //我指定目录/app tar -xzvf redis-stable.tar.gz -C /appcd /app/redis-stablemake && make install##三 、修改配置启动 …