0

私は以下のようにこのような署名を描き、XY座標を取り、それをarryリストに保存しています。

Bitmap bmp;

        //Graphics object 
        Graphics graphics;

        //Pen object
        Pen pen = new Pen(Color.Black);

        // Array List of line segments
        ArrayList pVector = new ArrayList();

        //Point object
        Point lastPoint = new Point(0, 0);

 protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);

            // process if currently drawing signature
            if (!drawSign)
            {
                // start collecting points
                drawSign = true;

                // use current mouse click as the first point
                lastPoint.X = e.X;
                lastPoint.Y = e.Y;
            }

        }

 protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);

            // process if drawing signature
            if (drawSign)
            {
                if (graphics != null)
                {
                    // draw the new segment on the memory bitmap
                    graphics.DrawLine(pen, lastPoint.X, lastPoint.Y, e.X, e.Y);
                    pVector.Add(lastPoint.X + " " + lastPoint.Y + " " + e.X + " " + e.Y);

                    // update the current position
                    lastPoint.X = e.X;
                    lastPoint.Y = e.Y;

                    // display the updated bitmap
                    Invalidate();
                }
            }
        }

arrylist(pVector)を使用して、以下に示すように、値をstring(singature)としてデータベースに保存し、画像としても保存します。

//Saving value to Database
ArrayList arrSign = new ArrayList();
                arrSign = this.signatureControl.getPVector();

                string singature = "";

                for (int i = 0; i < arrSign.Count; i++)
                {
                    singature = singature + arrSign[i].ToString() + "*";
                }


 the string singature  wiil be like this 
60 46 59 48*59 48 59 51*59 51 59 53*59 53 60 49*60 49 61 44*61 44 62 38*62 38 64 31*64 31 67 23*67 23 70 14*70 14 72 10*72 10 75 3*75 3 77 -2*77 -2 76 2*76 2 75 6*75 6 72 17*72 17 71 24*71 24 69 31*69 31 68 46*68 46 67 59*67 59 68 71*68 71 69 79*69 79 70 86*70 86 71 89*71 89 71 93*71 93 71 95*71 95 71 97*71 97 70 95*70 95 69 88*69 88 68 81*68 81 69 77*69 77 69 68*69 68 71 60

//Saving as Image file

   Pen pen = new Pen(Color.Black);
                                 string[] arrStr = (signature.Split('*'));

                                 Graphics graphics;
                                 Bitmap bmp = new Bitmap(300, 200);

                                 graphics = Graphics.FromImage(bmp);
                                 graphics.Clear(Color.White);

                                 for (int i = 0; i < arrStr.Length - 2; i++)
                                 {
                                     string[] strArr = new string[4];
                                     strArr = ((arrStr[i].ToString()).Split(' '));
                                     graphics.DrawLine(pen, Convert.ToInt32(strArr[0].ToString()), Convert.ToInt32(strArr[1].ToString()),
                                         Convert.ToInt32(strArr[2].ToString()), Convert.ToInt32(strArr[3].ToString()));
                                 }

                                 string pathToCopyImage = systemBus.TempFile;

                                 bmp.Save(pathToCopyImage + "\\" + dsReportDetails.Tables["tblDelivery"].Rows[0]["PKDelivery"].ToString() + "_Signature.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                                 bmp.Dispose();

私の問題は、署名を画像ファイルとして保存した後、データベースに値を保存するために使用されているようなarrylistに変換して戻すことができないことです。つまり、画像ファイルを以下の形式に戻す必要があります

60 46 59 48*59 48 59 51*59 51 59 53*59 53 60 49*60 49 61 44*61 44 62 38*62 38 64 31*64 31 67 23*67 23 70 14*70 14 72 10*72 10 75 3*75 3 77 -2*77 -2 76 2*76 2 75 6*75 6 72 17*72 17 71 24*71 24 69 31*69 31 68 46*68 46 67 59*67 59 68 71*68 71 69 79*69 79 70 86*70 86 71 89*71 89 71 93*71 93 71 95*71 95 71 97*71 97 70 95*70 95 69 88*69 88 68 81*68 81 69 77*69 77 69 68*69 68 71 60

誰か助けてくれませんか

4

1 に答える 1

0

「署名文字列」を画像から戻すのは簡単ではないため、保存した画像に「文字列署名」を画像のメタデータタグとして(たとえば、説明として)追加するだけです。したがって、画像を読み戻すと、画像から「署名文字列」を認識する必要はなく、メタデータから文字列として読み取ることができます。Msdnには、画像メタデータとAPIに関する優れた記事があります。http://msdn.microsoft.com/en-us/library/ms748873.aspx

ちなみに、「署名文字列」を連結するためのコードは遅く、メモリを消費します。.Netのこのような状況では、StringBuilderを使用することをお勧めします。また、全体的な文字列は、ポイントのリストを格納するのに最適なデータ構造ではありません。ただし、アプリの要件によって異なります。

于 2012-04-05T06:39:17.583 に答える