ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

触摸屏幕签字,签批屏对接可不使用提供的SDK

2021-12-17 23:01:22  阅读:136  来源: 互联网

标签:签批 Exception 触摸 void SignBox mousePath try ex SDK


一个偶然机会得知,触摸屏可替代签批屏,其原理就是通过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);
            }
        }

效果如图

标签:签批,Exception,触摸,void,SignBox,mousePath,try,ex,SDK
来源: https://blog.csdn.net/evint888/article/details/122006298

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有