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

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

  将印章设计模块设计的印章保存为图片并集中存放在指定文件夹内。新建印章应用项目,主要实现对图片及PDF文件加盖印章功能。本文实现给图片加盖印章功能。
  给图片加盖印章的逻辑比较简单,就是将印章图片绘制到图片指定位置,使用SKControl控件绘制图片(之前使用Panel控件和GDI+绘制图片,Panel自带滚动条及相关设置,暂时没有看到SKControl控件的滚动条设置方式)。
  主要实现的功能包括:
  1)枚举指定文件夹内的印章图片,选择印章后在线预览印章图片;
  2)打开本地图片并在SKControl控件绘制图片,支持图片缩放;
  3)点击加盖印章按钮,支持鼠标在SKControl控件中移动时实时显示印章,点击鼠标左键时,在点击位置加盖印章(将印章图片绘制到图片中鼠标点击位置)。

  关键代码及运行效果如下。程序运行时遇到的问题是印章图片和待盖章图片的分辨率不一样时,将印章图片绘制到待盖章图片中后,会出现印章变大或变小的情况,后续考虑如何处理这种情况。

private void pnlImage_PaintSurface(object sender, SkiaSharp.Views.Desktop.SKPaintSurfaceEventArgs e)
{SKCanvas canvas = e.Surface.Canvas;canvas.Clear();if (m_srcImage != null){canvas.DrawBitmap(m_srcImage, new SKRect(m_startX, m_startY, m_startX + m_srcImage.Width * m_scale, m_startY + m_srcImage.Height * m_scale));if (m_sealImage != null && !m_sealFixed){canvas.DrawBitmap(m_sealImage, new SKRect(m_sealStartX, m_sealStartY, m_sealStartX + m_sealImage.Width * m_scale, m_sealStartY + m_sealImage.Height * m_scale));}}
}private void pnlImage_MouseMove(object sender, MouseEventArgs e)
{if (!m_sealFixed){m_sealStartX = e.X;m_sealStartY = e.Y;pnlImage.Invalidate();}
}private void pnlImage_MouseClick(object sender, MouseEventArgs e)
{if (m_srcImage != null && !m_sealFixed){if (MessageBox.Show("确定在此处盖章?") == DialogResult.OK){m_sealFixed = true;using (SKCanvas canvas = new SKCanvas(m_srcImage)){canvas.DrawBitmap(m_sealImage, new SKPoint((e.X - m_startX) / m_scale, (e.Y - m_startY) / m_scale));}m_sealImage = null;pnlImage.Invalidate();}}
}

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

参考文献:
[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

相关文章:

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

将印章设计模块设计的印章保存为图片并集中存放在指定文件夹内。新建印章应用项目,主要实现对图片及PDF文件加盖印章功能。本文实现给图片加盖印章功能。   给图片加盖印章的逻辑比较简单,就是将印章图片绘制到图片指定位置,使用SKControl控…...

研究生如何利用ChatGPT帮助开展日常科研工作?

小白可做!全自动AI影视解说一键成片剪辑工具https://docs.qq.com/doc/DYnl6d0FLdHp0V2ll 作为当代研究生,科研工作三部曲----读文献、开组会、数据分析。无论哪一个,都令研究生们倍感头疼,简直就是梦魇。每当看到导师发来的消息&a…...

汽车零部件开发流程关键阶段

目录 1、定点阶段 1.1、定点前的准备工作 1.2、定点决策过程 1.3、定点后的工作交接 2、A样阶段:设计验证与基本功能实现 2.1、样件制作:从设计图纸到实物转化 2.2、功能测试:初步验证与性能评估 2.3、评估与优化:A样阶段…...

Magnific推V2图像生成服务 可直出4K图像

人工智能 - Ai工具集 - 集合全球ai人工智能软件的工具箱网站 近日,AI图像处理领域再迎重大突破,Magnific推出的V2图像生成服务引领行业潮流。此次升级,不仅使Magnific从高端软件跻身为顶级AI图像生成器,更彰显了其在技术创新及用…...

E9OA解决文档附件没有关联文档正文问题

业务背景: OA通知流程已经提交后在审批中发现漏上传了文档附件。临时放开审批结点文档附件编辑,请审批结点领导将附件上传后再审批。最终在流程中查看可以看到正文和附件,但是在通知文档正文中没有关联文档附件,导致大多数人员在通…...

EasyExcel日常使用总结

文章目录 概要引入依赖常用操作方法折叠或隐藏列折叠或隐藏行单元格样式单行表头设置多行表头设置多个sheet写入自动列宽 概要 EasyExcel日常使用总结。 引入依赖 引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</a…...

人只活一次,活出一道光吧

人只活一次, 你怎么舍得让自己的短暂的一生是丑陋的, 你怎么舍得让自己短暂的一生, 只是在往下坠落, 即便是坠落, 也应该具有落日般的华丽吧, 你会漫漫的活成一束光, 谁若接近你, 就是接近光, 【人人都想向上&#xff0c;人人都想老而不衰&#xff0c;但现实是当你想活成一道光…...

sqli-labs:1~16(sql注入点稳定判断语句、全回显半回显报错回显无回显利用思路、sql注入tips)

怎么验证sql注入的存在呢&#xff1f; 首先&#xff0c;双引号单引号注入&#xff0c;看看有没有报错&#xff0c;或者与正常参数的区别&#xff0c;有报错说明大概率可以注入成功&#xff0c;但是&#xff0c;很可能单引号和双引号测试可能没有报错回显&#xff0c;或者与正常…...

springboot农产品销售信息微信小程序—计算机毕业设计源码35557

摘 要 在信息飞速发展的今天&#xff0c;网络已成为人们重要的信息交流平台。每天都有大量的农产品需要通过网络发布&#xff0c;为此&#xff0c;本人开发了一个基于springboot农产品销售信息微信小程序。 对于本农产品销售信息系统的设计来说&#xff0c;它主要是采用后台采…...

HuggingChat macOS 版现已发布

Hugging Face 的开源聊天应用程序 Hugging Chat&#xff0c;现已推出适用于 macOS 的版本。 主要特点 Hugging Chat macOS 版本具有以下亮点: 强大的模型支持: 用户可以一键访问多个顶尖的开源大语言模型&#xff0c;包括 Qwen 2.5 72B、Command R、Phi 3.5、Mistral 12B 等等&…...

C#:动态为Object对象添加新属性的方法

在C#中&#xff0c;object 类型本身是一个基础类型&#xff0c;它不支持直接添加属性&#xff0c;因为 object 并不具备定义属性的能力&#xff08;它不支持任何接口或基类中的属性&#xff0c;除非通过类型转换&#xff09;。然而&#xff0c;有几种方法可以在运行时模拟给对象…...

我常用的几个Python金融数据接口库,非常好用~

在金融分析和量化投资领域&#xff0c;Python已成为最受欢迎的编程语言之一。这主要归功于其丰富的库和框架&#xff0c;它们提供了处理和分析金融数据所需的工具&#xff0c;而且还有大量免费实时的金融股票数据供你分析研究。 以下是六个最常用的Python金融数据接口库&#x…...

【机器学习】ID3、C4.5、CART 算法

目录 常见的决策树算法 1. ID3 2. C4.5 3. CART 决策树的优缺点 优点&#xff1a; 缺点&#xff1a; 决策树的优化 常见的决策树算法 1. ID3 ID3&#xff08;Iterative Dichotomiser 3&#xff09;算法使用信息增益作为特征选择的标准。它是一种贪心算法&#xff0c;信…...

UE5: Content browser工具编写02

DebugHeader.h 中的全局变量&#xff0c;已经在一个cpp file中被include了&#xff0c;如果在另一个cpp file中再include它&#xff0c;就会有一些conflicts。先全部给加一个static Add static keyword to debug functionsWrap all the functions inside of a namespaceprint …...

【ARM】MDK-当选择AC5时每次点击build都会全编译

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决MDK中选择AC5时每次点击build都会全编译 2、 问题场景 在MDK中点击build时&#xff0c;正常会只进行增量编译&#xff0c;但目前每次点击的时候都会全编译。 3、软硬件环境 1 软件版本&#xff1a;Keil MDK 5.…...

使用ESPnet的 setup_anaconda.sh安装脚本一步到位,配置conda虚拟环境

使用ESPnet的 setup_anaconda.sh 安装脚本一步到位&#xff0c;配置conda虚拟环境 前言 ESPnet&#xff08;End-to-End Speech Processing Toolkit&#xff09;是一款用于语音识别、语音合成等任务的开源端到端语音处理工具包。为了在不同系统上快速配置ESPnet开发环境&#…...

9、论文阅读:无监督的感知驱动深水下图像增强

Perception-Driven Deep Underwater Image Enhancement Without Paired Supervision 前言引言相关工作UIE模型基于非物理模型基于物理模型基于深度学习质量度量在图像增强中的应用方法论问题表述PQR模型PDD网络生成器损失函数实验Enhancement Without Paired Supervision) 前言…...

谷歌收录查询工具,使用谷歌收录查询工具查询网站收录情况并优化内容的详细步骤

在数字营销和SEO领域&#xff0c;了解网站在谷歌搜索引擎中的收录情况至关重要。使用谷歌收录查询工具&#xff0c;可以有效地监测网站的索引状态&#xff0c;进而优化内容以提升网站排名和曝光度。以下是如何使用谷歌收录查询工具查询网站收录情况并优化内容的详细步骤&#x…...

代理中长效的长板在哪里

伙伴们&#xff0c;之前咱们讨论过了短效代理的用途&#xff0c;那么今天我们来聊一聊长效代理的多元化用途&#xff0c;大家也可以对比一下它们的区别&#xff0c;根据自身的需求针对性地去选择合适的哦。 在企业的网络安全保卫战中&#xff0c;长效代理像是一座坚不可摧的钢…...

VS code Jupyter notebook 导入文件目录问题

VS code Jupyter notebook 导入文件目录问题 引言正文引言 这几天被 VS code 中 Jupyter Notebook 中的文件导入折磨的死去活来。这里特来说明一下放置于不同文件夹下的模块该如何被导入。 正文 首先,我们需要按下 Ctrl + , 键打开设置,然后搜索 notebook file root。在如…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...