InkCollector Signiture Made Easy

转自:http://www.codeproject.com/Articles/105570/InkCollector-Signiture-Made-Easy


The following article is useful when trying to import Ink into a database. I have tried to keep it as simple as possible.

Example.png

I've successfully used this in my Access database that holds about 500 signatures; the average signature size is about 1500 characters. The largest one on record is 2853 and the smallest one on record is 1139. To store this in a Microsoft Access Database, you will need to save it in a memo field as the maximum number of characters in a Text field is 255.

Using the Code

First add the reference for Microsoft.Ink to your VB Project, next create a group box on your form. Before your form class, add Imports Microsoft.Ink so that a InkCollector control can be created. First, define the InkCollector control. Then, create the control from your form load sub and give it the handle of your group box.

Your code should then look something like this:

Imports Microsoft.Ink 'Required for InkCollector

Public Class frmMain

    Dim Sig_InkCollector As InkCollector 'The InkCollector

    Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
	Handles Me.Load
        Sig_InkCollector = New InkCollector(GroupBox1.Handle)
        Sig_InkCollector.Enabled = True
        Sig_InkCollector.AutoRedraw = True
    End Sub
End Class

I have just completed adding a function that converts the base64 string to an image so that it can be attached to a RTF, HTML or printed easily.

To Clear the Signiture

Specify call the clear sub from the Signiture module, then specify the InkCollector and the GroupBox which contains the InkCollector control.

Signiture.Clear(Sig_InkCollector, GroupBox1)

To Set the Signiture

To load a signiture Base64 string into the inkCollector, call the following Sub, specify the InkCollector and the GroupBox which contains the InkCollector control, then the Base64 String.

Signiture.SetBase64(Sig_InkCollector, GroupBox1, TextBox1.Text)
To Get the Signiture

To read the Signiture from the InkCollector, call the following function and specify the InkCollector. The Base64 String will be returned.

Textbox1.Text = Signiture.GetBase64(Sig_InkCollector) 
To Convert Base64 to Image

To convert a stored Base64InkSerializedFormat String to an Image, so that the signiture can be displayed in a report.

PictureBox1.Image = Signiture.Base64toImage(TextBox1.Text) 

Source

Imports Microsoft.Ink 'Required for InkPicture
Imports System.Text 'Required by UTF8Encoding
Imports System.IO 'Required by MemoryStream
''' <summary>
''' Signiture Made Easy Module
''' Created by Marco van der Merwe (22 September 2010)
''' </summary>
Module Signiture
''' <summary>
''' Returns String in Format(PersistenceFormat = Base64InkSerializedFormat)
''' </summary>
''' <param name="InkCollector"></param>
''' <returns> String Format(PersistenceFormat = Base64InkSerializedFormat)</returns>
''' <remarks></remarks>
Function GetBase64(ByVal InkCollector As InkCollector) As String
Dim utf8 As UTF8Encoding = New UTF8Encoding()
InkCollector.Enabled = False
Return utf8.GetString(InkCollector.Ink.Save_
	(PersistenceFormat.Base64InkSerializedFormat, CompressionMode.Maximum))
InkCollector.Enabled = True
End Function
''' <summary>
''' Sets the Base 64 Ink from String
''' </summary>
''' <param name="InkCollector"></param>
''' <param name="GroupBox"></param>
''' <param name="Base64"></param>
''' <remarks></remarks>
Sub SetBase64(ByVal InkCollector As InkCollector, _
	ByVal GroupBox As GroupBox, ByVal Base64 As String)
Dim loadedInk As Ink = New Ink()
Dim utf8 As UTF8Encoding = New UTF8Encoding()
InkCollector.Enabled = False
InkCollector.Ink.DeleteStrokes() ' Clear all strokes
loadedInk.Load(utf8.GetBytes(Base64))
InkCollector.Ink = loadedInk
InkCollector.Enabled = True
GroupBox.Invalidate()
End Sub
''' <summary>
''' Clear Signiture
''' </summary>
''' <param name="InkCollector"></param>
''' <param name="GroupBox"></param>
''' <remarks></remarks>
Sub Clear(ByVal InkCollector As InkCollector, ByVal GroupBox As GroupBox)
InkCollector.Enabled = False ' Disable InkPicture to clear
InkCollector.Ink.DeleteStrokes() ' Clear all strokes
GroupBox.Invalidate() ' Redraw frame
InkCollector.Enabled = True ' Reenale InkPicture for entry
End Sub
 
''' <summary>
''' Converts String Format(PersistenceFormat = Base64InkSerializedFormat) 
''' to System.Drawing.Image
''' </summary>
''' <param name="Base64"></param>
''' <returns>System.Drawing.Image</returns>
''' <remarks></remarks>
Function Base64toImage(ByVal Base64 As String) As System.Drawing.Image
Dim utf8 As UTF8Encoding = New UTF8Encoding()
Dim imgSig As System.Drawing.Image
Dim tmploadedInk As Ink = New Ink()
Dim strGIF As String
Dim imageBytes() As Byte
Dim MS As MemoryStream
'Load the Base64 String in Format(PersistenceFormat = Base64InkSerializedFormat) as ink
tmploadedInk.Load(utf8.GetBytes(Base64))
'Convert the ink to Base64 String in format 
'(PersistenceFormat.Gif, CompressionMode.Maximum)
strGIF = Convert.ToBase64String(tmploadedInk.Save_
	(PersistenceFormat.Gif, CompressionMode.Maximum))
'Convert Base64 String to Byte Array
imageBytes = Convert.FromBase64String(strGIF)
MS = New MemoryStream(imageBytes, 0, imageBytes.Length)
' Convert byte[] to Image
MS.Write(imageBytes, 0, imageBytes.Length)
imgSig = Image.FromStream(MS, True)
Return imgSig
End Function
End Module

Points of Interest

I’ve tried everything with InkPicture for about 3 weeks and had no results, until I started using InkCollector. I had many unexplained errors and very little help with InkPicture, this is far easier to use.

I know the Access Database gets quite large, but at least these signitures are secured by a password and my data is at least stored in the same database.

History

  • Added Image Support, to convert Base64InkSerializedFormat string to Image
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值