前言
在工业控制、电子签章、客户确认等场景中,手写签名功能非常常见。本文将介绍如何使用 C# WinForm 开发一个流畅、不卡顿的手写签名控件,并实现自动保存签名到本地的功能,同时兼容触摸屏设备。
项目简介
该项目基于 WinForm 实现了一个手写签名板功能,具有以下特点:
- 支持鼠标和触摸屏输入
- 可自定义画笔属性(颜色、透明度、宽度)
- 签名后自动保存为图片文件
- 图片按日期分类存储
- 界面简洁、操作方便
- 源码开源,适合二次开发与学习
核心功能实现
1、定义画笔相关变量
我们使用 GraphicsPath 来记录用户绘制的路径,并通过变量控制画笔的颜色、透明度和宽度。
private System.Drawing.Drawing2D.GraphicsPath mousePath = new System.Drawing.Drawing2D.GraphicsPath();
private int myAlpha = 100; // 透明度
private Color myUserColor = Color.Black; // 默认颜色
private int myPenWidth = 10; // 画笔宽度
public Bitmap SavedBitmap; // 保存的签名图片
提示:你可以根据需要动态修改 myAlpha(0~255)、myUserColor 和 myPenWidth 来改变画笔效果。
2、绘图事件处理
鼠标按下开始绘图
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
mousePath.Reset();
mousePath.StartFigure();
}
鼠标移动进行绘制
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mousePath.AddLine(e.X, e.Y, e.X, e.Y);
using (Pen pen = new Pen(Color.FromArgb(myAlpha, myUserColor), myPenWidth))
{
pictureBox1.CreateGraphics().DrawPath(pen, mousePath);
}
}
}
鼠标释放结束绘制
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
mousePath.CloseFigure();
}
3、保存签名至本地
签名完成后,使用 DrawToBitmap 方法将 PictureBox 内容保存为 Bitmap,然后按照日期创建文件夹,保存为 JPG 格式。
SavedBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(SavedBitmap, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
string path = Path.Combine(System.Environment.CurrentDirectory, "sign", DateTime.Now.ToString("yyyy-MM-dd"));
string name = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg";
if (!Directory.Exists(path)) Directory.CreateDirectory(path);
SavedBitmap.Save(Path.Combine(path, name), ImageFormat.Jpeg);
this.DialogResult = DialogResult.OK;
pictureBox1.Invalidate(); // 清空绘图区域
项目效果
如上图所示,用户可以在 PictureBox 区域自由书写签名,系统会自动保存到本地目录。
适用场景
工厂MES系统中的客户签字确认
POS终端、自助服务机上的电子签名
教育考试系统的考生签名录入
各类需要电子化签名的业务流程
总结
通过本文的介绍,了解了如何使用 C# WinForm 实现一个简单、高效、兼容触摸屏的手写签名控件。该方案具备良好的扩展性,可进一步结合数据库管理、网络传输等功能,开发完整的电子签名系统。
如果你正在开发智能制造、工业控制系统、POS终端等项目,这个签名控件将是一个非常实用的小工具。
提示:建议在实际部署前对路径权限、异常处理、资源释放等细节做进一步完善,以提高程序的健壮性和用户体验。
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!
作者:小小工具箱
出处:blog.csdn.net/m0_62355555/article/details/124996580
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!