1

如前所述,我们应该如何正确地将使用 SignaturePad 组件捕获的签名保存到 SQL Server 数据库中?好吧,考虑到组件使用的 GetImage(false) 方法返回 Bitmap 并稍后将 Bitmap 压缩为 JPEG 并使用 Stream 压缩为数组字节,这应该很容易。然后应该将字节数组直接保存到 SQL Server 数据库中;但是,这种方法的问题在于,当您从数据库中检索图像时,图像全是黑色的。就像从未捕获笔画一样,有趣的是SignaturePad的背景颜色设置为白色,笔画颜色为黑色。

Xamarin.Android 按钮 OnClick 事件处理程序

var signature = this.SignatureView.GetImage(false); // This returns the Bitmap from SignaturePad.
var imageData = this.ImageToByteArray(signature); // This converts the Bitmap to byte[].

var result = this.SaveDataAsync(imageData); // Save the byte[] to the database.

Xamarin.Android 扩展方法

private byte[] ImageToByteArray(Bitmap image)
{
    if (image == null) return null;

    byte[] result;

    using (var stream = new MemoryStream())
    {
        image.Compress(CompressFormat.Jpeg, 100, stream);
        result = stream.ToArray();
        stream.Flush();
    }

    return result;
}

这与我们在 iOS 上采用的方法相同,但不适用于 Android。任何想法或工作解决方案将不胜感激。

谢谢!

复制自Xamarin 论坛 - 组件部分

4

1 回答 1

0

好的,我想我找到了解决这个问题的方法,这在该线程Signature Pad for Xamarin.Forms中有描述。我不确定为什么我们需要在 GetImage() 方法中指定颜色,而已经指定了 Stroke 和 Background 颜色的属性。好吧,我猜绘制图像所需的颜色与属性的颜色不同。

于 2015-08-12T18:59:57.360 回答