【问题标题】:Xamarin forms signature pad Get imageXamarin 表单签名板 获取图像
【发布时间】:2016-06-03 11:02:13
【问题描述】:

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

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

【问题讨论】:

    标签: c# xamarin xamarin.forms signaturepad


    【解决方案1】:

    我对 Xamarin Forms 签名板不太熟悉,但如果您正在寻找将 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 );
    

    【讨论】:

    • 如果答案解决了您的问题,您可以将答案标记为“已接受”,以防其他人在遇到类似问题时偶然发现您的问题...
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2019-12-22
      相关资源
      最近更新 更多