当前位置: 首页 > 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

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

相关文章:

  • 研究生如何利用ChatGPT帮助开展日常科研工作?
  • 汽车零部件开发流程关键阶段
  • Magnific推V2图像生成服务 可直出4K图像
  • E9OA解决文档附件没有关联文档正文问题
  • EasyExcel日常使用总结
  • 人只活一次,活出一道光吧
  • sqli-labs:1~16(sql注入点稳定判断语句、全回显半回显报错回显无回显利用思路、sql注入tips)
  • springboot农产品销售信息微信小程序—计算机毕业设计源码35557
  • HuggingChat macOS 版现已发布
  • C#:动态为Object对象添加新属性的方法
  • 我常用的几个Python金融数据接口库,非常好用~
  • 【机器学习】ID3、C4.5、CART 算法
  • UE5: Content browser工具编写02
  • 【ARM】MDK-当选择AC5时每次点击build都会全编译
  • 使用ESPnet的 setup_anaconda.sh安装脚本一步到位,配置conda虚拟环境
  • 9、论文阅读:无监督的感知驱动深水下图像增强
  • 谷歌收录查询工具,使用谷歌收录查询工具查询网站收录情况并优化内容的详细步骤
  • 代理中长效的长板在哪里
  • VS code Jupyter notebook 导入文件目录问题
  • 【IDEA】将光标移动到您上一次编辑的地方
  • 设备管理平台-支持快速开发
  • Vue项目开发注意事项
  • Vivado时序报告之CDC详解大全
  • 【研赛A题成品论文】24华为杯数学建模研赛A题成品论文+可运行代码丨免费分享
  • 华为OD机试 - 小明的幸运数(Python/JS/C/C++ 2024 E卷 100分)
  • 嵌入式学习——进程间通信方式(3)—— 共享内存
  • python开发讯飞星火
  • 自然语言处理(jieba库分词)
  • MYSQL-查看函数创建语句语法(五)
  • 图解IRF