C# WinForm 繪制手寫簽名


C# WinForm 繪制 手寫 簽名

C# WinForm 實現 手寫 簽名

C# WinForm 書寫

 

參考博客(此文章作者的實現有閃爍,卡頓的問題,本文解決了此問題):

https://www.cnblogs.com/wuhuacong/p/2791434.html

 

界面(運行):

 

 界面(布局):

 

 代碼:

    public partial class FrmSign : FrmFormFlat
    {
        /// <summary>
        /// 圖像
        /// </summary>
        public Bitmap bitmap;

        //記錄直線或者曲線
        private GraphicsPath mousePath = new GraphicsPath();
        //畫筆顏色
        private Color myUserColor = Color.Navy;
        //畫筆寬度
        private int myPenWidth = 2;

        public FrmSign()
        {
            InitializeComponent();
        }

        public FrmSign(Image image)
        {
            InitializeComponent();

            if (image != null)
            {
                panel1.BackgroundImage = image;
                panel1.Width = image.Width;
                panel1.Height = image.Height;
            }

        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Right)
            {
                mousePath.AddLine(e.X, e.Y, e.X, e.Y);

                Graphics g = panel1.CreateGraphics();
                g.DrawPath(new Pen(myUserColor, myPenWidth), mousePath);
            }
        }

        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Right)
            {
                mousePath.StartFigure();
            }
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawPath(new Pen(myUserColor, myPenWidth), mousePath);
        }

        private void GetBitmap()
        {
            //bitmap = new Bitmap(panel1.Width, panel1.Height);
            //panel1.DrawToBitmap(bitmap, new Rectangle(0, 0, panel1.Width, panel1.Height));

            Bitmap bit = new Bitmap(panel1.Width, panel1.Height);
            Graphics g = Graphics.FromImage(bit);
            g.CompositingQuality = CompositingQuality.HighQuality;
            g.CopyFromScreen(panel1.PointToScreen(Point.Empty), Point.Empty, new Size(panel1.Width, panel1.Height));

            bitmap = bit;
            g.Dispose();
        }

        //保存
        private void buttonFlatBC_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
            GetBitmap();
            this.Close();
        }

        //選擇顏色
        private void buttonFlat1_Click(object sender, EventArgs e)
        {
            if (colorDialog1.ShowDialog() == DialogResult.OK)
            {
                buttonFlat1.BackColor = colorDialog1.Color;
                myUserColor = colorDialog1.Color;
            }
        }

        //清除
        private void buttonFlat2_Click(object sender, EventArgs e)
        {
            mousePath.Reset();
            panel1.Invalidate();
        }
    }

  

樣式代碼就不貼出了,因為大家的樣式可能都不一樣。

完成

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM