1

Im using the following code to get the signature from the signature pad, But any value doesn't come.

try {
            var signature = padView.GetImage (Acr.XamForms.SignaturePad.ImageFormatType.Png);
            using (BinaryReader br = new BinaryReader (signature)) {
                var result = br.ReadBytes ((int)signature.Length);

            }

        } catch (Exception ex) {
            //              Helper_ErrorHandling.SendErrorToServer (ex);
        }

Am I ding it wrong, Also how do i convert this to a base64 string ?

anslem arnolda
  • 261
  • 1
  • 7
  • 19

2 Answers2

2

I'm not too familiar with the Xamarin Forms Signature Pad, but if you're looking for a way to convert a Stream to as base64 string, try this:

[...]
string base64String;
using (var memoryStream = new MemoryStream()) 
{ 
    signature.CopyTo( memoryStream ); 
    var byteArray = memoryStream.ToArray();
    base64String = Convert.ToBase64String( byteArray );
} 

EDIT: you can most of the time skip the copy, if you check if signature is already a MemoryStream...

[...]
string base64String;
var signatureMemoryStream = signature as MemoryStream;
if (signatureMemoryStream == null)
{
    signatureMemoryStream = new MemoryStream();
    signature.CopyTo( signatureMemoryStream );
}
var byteArray = signatureMemoryStream.ToArray();
base64String = Convert.ToBase64String( byteArray );
CennoxX
  • 773
  • 1
  • 9
  • 20
Haukinger
  • 10,420
  • 2
  • 15
  • 28
0

Using the most current PCL compliant Xamarin package :

acr-xamarin-forms

This method works like a charm!

private string ConvertSignatureToBase64()
    {
        try
        {
            byte[] data;
            if(Device.OS == TargetPlatform.iOS)
            {
                var img = SignaturePad.GetImage(Acr.XamForms.SignaturePad.ImageFormatType.Jpg);
                var signatureMemoryStream = new MemoryStream();
                img.CopyTo(signatureMemoryStream);
                data = signatureMemoryStream.ToArray();
            }
            else
            {
                var img = SignaturePad.GetImage(Acr.XamForms.SignaturePad.ImageFormatType.Jpg);
                var signatureMemoryStream = (MemoryStream)img;
                data = signatureMemoryStream.ToArray();
            }

            return Convert.ToBase64String(data);      
        }
        catch(Exception ex)
        {
            return ex.ToString();
        }
    }
michael g
  • 603
  • 7
  • 14