2012-04-05 8 views
0

私は以下のような署名を描き、X座標を取ってそれをarryリストに保存します。イメージファイルをX座標に変換する必要があります

//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(P-VECTOR)私は、文字列(singature)としてデータベースに値を保存していますし、asloを使用して

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に変換することはできません。私は戻ってフォーマット以下に示すように、画像ファイルを変換する必要がある。すなわち

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 

は、いずれも戻っイメージからすることができますので、あなたの「署名の文字列」を得ることは非常に簡単ではありません

答えて

0

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

ところで、「署名文字列」を連結するためのコードは遅く、メモリを消費します。 .Netのような状況でStringBuilderを使う方が良いです。また、全体的な文字列は、ポイントのリストを格納するのに最適なデータ構造ではありません。しかし、それはあなたのアプリケーションの要件に依存します。

関連する問題