当前位置: 首页 > 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。在如…...

不止于配置:用Horizon UAG 21.11打造安全外网访问,别忘了这些加固设置

超越基础配置&#xff1a;Horizon UAG 21.11安全加固全指南 在虚拟桌面架构中&#xff0c;统一接入网关&#xff08;UAG&#xff09;作为内外网流量的安全屏障&#xff0c;其配置合理性直接影响整体架构的安全性。许多管理员在完成UAG基础部署后&#xff0c;往往忽略了更深层次…...

TMSpeech:开源本地语音转文字工具的隐私革命

TMSpeech&#xff1a;开源本地语音转文字工具的隐私革命 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 在数字化办公浪潮中&#xff0c;语音转文字工具已成为效率提升的关键助手&#xff0c;但云端处理的隐私泄露风…...

OpenFOAM字典文件关键配置实战指南

1. OpenFOAM字典文件基础认知 第一次接触OpenFOAM的朋友&#xff0c;看到满屏幕的字典文件可能会有点懵。这玩意儿就像乐高积木的说明书&#xff0c;告诉你每个零件该怎么拼。我刚开始用的时候&#xff0c;经常把blockMeshDict和snappyHexMeshDict搞混&#xff0c;结果生成的网…...

3月31日(AI审批+技术岗位情况+知识获取方法)

如何用 AI 分类器替代人工审批 Claude 每执行一个命令、每改一个文件&#xff0c;都要你点一次“同意”。用户 93% 的操作都会批准。也就是说&#xff0c;这个“安全审批”环节&#xff0c;绝大多数时候只是一个条件反射。 告警疲劳&#xff1a;100 条告警里只有 7 条需要关注…...

Pixel Epic动态卷轴技术揭秘:TextIteratorStreamer流式输出实现原理与调优

Pixel Epic动态卷轴技术揭秘&#xff1a;TextIteratorStreamer流式输出实现原理与调优 1. 引言&#xff1a;像素史诗的独特体验 Pixel Epic&#xff08;像素史诗&#xff09;作为一款研究报告辅助终端&#xff0c;最引人注目的特点莫过于其独特的"动态卷轴"输出效果…...

NiceGUI实战:打造动态路由导航栏的3个关键技巧

1. 为什么需要动态路由导航栏&#xff1f; 如果你用过NiceGUI开发Web应用&#xff0c;肯定遇到过这样的尴尬&#xff1a;想做个导航菜单&#xff0c;却发现官方压根没提供现成组件。这就像装修房子时发现建材市场不卖门把手——虽然不影响主体结构&#xff0c;但用起来总感觉少…...

Hunyuan-MT-7B翻译终端效果展示:Pixel Language Portal长文本段落对齐精度对比

Hunyuan-MT-7B翻译终端效果展示&#xff1a;Pixel Language Portal长文本段落对齐精度对比 1. 产品概览&#xff1a;像素语言冒险工坊 **像素语言跨维传送门(Pixel Language Portal)**是一款基于腾讯Hunyuan-MT-7B核心引擎构建的创新翻译终端。与传统翻译工具不同&#xff0c…...

手把手教你用Global Mapper搞定大范围遥感影像:从按县界裁剪到自动切片分发的完整流程

大范围遥感影像工程化处理实战&#xff1a;Global Mapper全流程解决方案 当面对覆盖全省的Sentinel-2影像时&#xff0c;大多数GIS工程师的第一反应可能是打开QGIS或ArcGIS Pro&#xff0c;配合GDAL命令行工具完成从裁剪到分发的全流程。但今天我要分享的是一条更高效的路径——…...

告别轮询!GD32F407 ADC+DMA+定时器触发,实现多通道自动采集与存储

GD32F407 ADCDMA定时器触发&#xff1a;多通道自动采集系统设计指南 在物联网节点和工业监测设备开发中&#xff0c;高效稳定的数据采集系统是核心基础。传统轮询式ADC采集不仅占用大量CPU资源&#xff0c;还难以满足多通道同步、高精度定时采集的需求。本文将深入讲解基于GD32…...

Altium Designer 实战指南:高效创建与优化PCB封装库

1. Altium Designer封装库基础入门 刚接触PCB设计时&#xff0c;我最头疼的就是封装库的创建。记得第一次画板子&#xff0c;因为电阻封装画错导致整批板子返工&#xff0c;那种挫败感至今难忘。现在用Altium Designer做封装就像搭积木一样简单&#xff0c;关键是要掌握正确的方…...