如前所述,我们应该如何正确地将使用 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。任何想法或工作解决方案将不胜感激。
谢谢!