0

Windows Mobile 6.1で動作するOpenNetCFのスマートデバイスフレームワーク2.1を使用して署名をキャプチャしているハンドヘルド上で実行されているSQLiteデータベースがあります。シグネチャは、GetSignatureExメソッドを使用してシグネチャコントロールからキャプチャされ、データベースに格納されます。OpenNetCF GetSignatureExをデスクトップ上のビットマップに変換する

私が今やりたいことは、デスクトップ上の署名を再構成することですが、デスクトップには同様のコントロールがありません。私はデータを見て、それはベクトルの束のように見えます、なぜデータがとてもコンパクトであるかを説明します。

VB.NETを使用してデスクトップ上のビットマップにデータを変換する方法を知っている人はいませんか。ありがとう。

答えて

0

OpenNetCFフォーラムで私が欲しかったものが見つかりました。コードはもともとはC#に入っていましたが、VB.NETに変換するのに時間がかかりませんでした。このコードはOpenNetCFフレームワークのバージョン2.0と2.1でテストされていますが、明らかにバージョン1.4で動作します。コリン

Public Function GetSignature(ByVal arrsig As Byte(), ByVal backcolor As System.Drawing.Color) 
    Dim pic As System.Windows.Forms.PictureBox 
    Dim word As Integer 
    Dim lngIndex As Integer 
    Dim lngPointsToRead As Integer = 0 
    Dim lngCurrX As Integer = -1 
    Dim lngCurrY As Integer = -1 
    Dim lngPrevX As Integer = -1 
    Dim lngPrevY As Integer = -1 
    Dim lngWidth As Integer = 1 
    Dim lngHeight As Integer 
    Dim bit As New System.Drawing.Bitmap(1, 1) 
    Dim g As Graphics = Graphics.FromImage(bit) 
    pic = New picturebox() 
    Dim blackpen As New Pen(Color.Black) 
    If arrsig.Length < 3 Then 
     Return Nothing 
    End If 
    word = arrsig(0) 
    word = word + System.Convert.ToInt32(arrsig(1)) * 256 
    lngWidth = word 
    word = arrsig(2) 
    word = word + System.Convert.ToInt32(arrsig(3)) * 256 
    lngHeight = word 
    bit = New Bitmap(lngWidth, lngHeight) 
    g = Graphics.FromImage(bit) 
    g.Clear(backcolor) 
    lngIndex = 4 
    While (True) 
     If (lngIndex >= arrsig.Length) Then 
      Exit While 
     End If 
     If (lngPointsToRead = 0) Then 
      word = arrsig(lngIndex) 
      lngIndex = lngIndex + 1 
      word = word + System.Convert.ToInt32(arrsig(lngIndex)) * 256 
      lngPointsToRead = word 
      lngPrevX = -1 
      lngPrevY = -1 
     Else 
      If (lngCurrX = -1) Then 
       word = arrsig(lngIndex) 
       If (lngWidth > 255) Then 
        lngIndex = lngIndex + 1 
        word = word + System.Convert.ToInt32(arrsig(lngIndex)) * 256 
       End If 
       lngCurrX = word 
      ElseIf (lngCurrY = -1) Then 
       word = arrsig(lngIndex) 
       If (lngHeight > 255) Then 
        lngIndex = lngIndex + 1 
        word = word + System.Convert.ToInt32(arrsig(lngIndex)) * 256 
       End If 
       lngCurrY = word 
       lngPointsToRead = lngPointsToRead - 1 
       If (lngPrevX <> -1) Then 
        g.DrawLine(blackpen, lngPrevX, lngPrevY, lngCurrX, lngCurrY) 
       End If 
       lngPrevX = lngCurrX 
       lngPrevY = lngCurrY 
       lngCurrX = -1 
       lngCurrY = -1 
      End If 
     End If 
     lngIndex = lngIndex + 1 
    End While 
    pic.Image = bit 
    Return pic.Image 
End Function 
関連する問題