Xamarin形成签名板获取图像

时间:2016-06-03 11:02:13

标签: c# xamarin xamarin.forms signaturepad

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

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字符串 ?

2 个答案:

答案 0 :(得分:2)

我对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 );

答案 1 :(得分:0)

使用最新的符合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();
        }
    }