一个偶然机会得知,触摸屏可替代签批屏,其原理就是通过GraphicsPath来记录触摸过的坐标点,再通过Paint事件实时绘制到屏幕上,下面对类进行了封装,封装类似汉王签批屏的模式,主要流程如下:
1、初始化
/// <summary>
/// 初始化
/// </summary>
/// <param name="_signname"></param>
/// <param name="_panel"></param>
public void Init(string _signname, Panel _panel)
{
try
{
SignBox.Parent = _panel;
SignBox.Left = 0;
SignBox.Top = 0;
SignBox.Width = _panel.Width;
SignBox.Height = _panel.Height;
SignBox.Paint += SignBox_Paint;
SignBox.MouseDown += SignBox_MouseDown;
SignBox.MouseMove += SignBox_MouseMove;
SignName = _signname;
}
catch (Exception ex)
{
LogHelper.Debug(ex);
}
}
2、记录绘制轨迹
private void SignBox_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
try
{
mousePath.AddLine(e.X, e.Y, e.X, e.Y);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
SignBox.Invalidate();
}
private void SignBox_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
mousePath.StartFigure();
}
}
3、绘制
private void SignBox_Paint(object sender, PaintEventArgs e)
{
try
{
myUserColor = System.Drawing.Color.Black;
myAlpha = 255;
Pen CurrentPen = new Pen(Color.FromArgb(myAlpha, myUserColor), myPenWidth);
e.Graphics.DrawPath(CurrentPen, mousePath);
}
catch (Exception ex)
{
LogHelper.Debug(ex);
}
}
4、保存签字信息
/// <summary>
/// 签字
/// </summary>
/// <returns></returns>
public bool Sign()
{
bool Ret = false;
try
{
if (mousePath.PointCount > 0)
{
using (SavedBitmap = new Bitmap(SignBox.Width, SignBox.Height))
{
SignBox.DrawToBitmap(SavedBitmap, new Rectangle(0, 0, SignBox.Width, SignBox.Height));
SavedBitmap.Save(SignName);
Ret = true;
}
}
}
catch (Exception ex)
{
LogHelper.Debug(ex);
}
return Ret;
}
5、重签
/// <summary>
/// 清除
/// </summary>
public void Clear()
{
try
{
using (Graphics gra = SignBox.CreateGraphics())
{
gra.Clear(Color.White);
}
mousePath.Reset();
}
catch (Exception ex)
{
LogHelper.Debug(ex);
}
}
6、释放
/// <summary>
/// 释放
/// </summary>
public void Uinit()
{
try
{
if (SavedBitmap != null) SavedBitmap.Dispose();
if (mousePath != null) mousePath.Dispose();
}
catch (Exception ex)
{
LogHelper.Debug(ex);
}
}
效果如图