Xamarin 表单签名板获取图像

Xamarin forms signature pad Get image

我正在使用以下代码从签名板获取签名,但是没有任何值。

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);
        }

我是不是记错了,还有我如何将其转换为 base64 字符串 ?

我不太熟悉 Xamarin Forms Signature Pad,但如果您正在寻找一种将 Stream 转换为 base64 字符串的方法,请试试这个:

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

编辑:如果您检查 signature 是否已经是 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 );

使用最新的 PCL 兼容的 Xamarin 包:

acr-xamarin-forms

这个方法非常有效!

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();
        }
    }