using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Collections; namespace Smart.Utility { public class Drawing { public class signature : Control { Bitmap _bmp; Point _previouspoint = new Point(); ArrayList _points; ArrayList _lines = new ArrayList(); Graphics _g; Pen _pen = new Pen(Color.Black, 2); Boolean _Enable = false; int _picWidth = 0; int _picHeight = 0; protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e) { if (_Enable == true) { _previouspoint.X = e.X; _previouspoint.Y = e.Y; _points = new ArrayList(); _points.Add(_previouspoint); } } protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { if (_Enable == true) { _points.Add(new Point(e.X, e.Y)); _g.DrawLine(_pen, _previouspoint.X, _previouspoint.Y, e.X, e.Y); _previouspoint.X = e.X; _previouspoint.Y = e.Y; Invalidate(); } } protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e) { if (_Enable == true) { Int32 _count = _points.Count - 1; Point[] pts = new Point[_count]; for (int i = 0; i < _points.Count - 1; i++) { pts[i] = (Point)_points[i]; } _lines.Add(pts); } } public void Initsignature(string bmpLocation) { String path = bmpLocation; _bmp = new Bitmap(path); _picHeight = _bmp.Height; _picWidth = _bmp.Width; _g = Graphics.FromImage(_bmp); Invalidate(); } protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { e.Graphics.DrawImage(_bmp, 0, 0); } protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e) { } public Boolean Enable { get { return _Enable; } set { _Enable = value; } } private void DrawSignature() { for (int line = 0; line <= _lines.Count - 1; line++) { Point[] pts = (Point[])_lines[line]; for (int i = 1; i <= pts.Length - 1; i++) { _g.DrawLine(_pen, pts[i - 1].X, pts[i - 1].Y, pts[i].X, pts[i].Y); } } Invalidate(); } public string Signature { get { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (Point[] ar in _lines) { foreach (Point pt in ar) { sb.Append(pt.X.ToString() + "," + pt.Y.ToString() + "|"); } sb.Append("@"); } return sb.ToString(); } set { _lines.Clear(); Char[] valueDeliminator = { '@' }; Char[] lineDeliminator = { '|' }; Char[] pointDeliminator = { ',' }; string[] lines = value.Split(valueDeliminator); for (int i = 0; i <= lines.Length - 2; i++) { string[] ps = lines[i].Split(lineDeliminator); Point[] points = new Point[ps.Length - 2]; for (int j = 0; j < ps.Length - 2; j++) { string[] xy = ps[j].Split(pointDeliminator); points[j] = new Point(Convert.ToInt32(xy[0]), Convert.ToInt32(xy[1])); } _lines.Add(points); } DrawSignature(); } } } } }