前述のように、SignaturePad コンポーネントを使用して取得した署名を SQL Server データベースに適切に保存するにはどうすればよいでしょうか? コンポーネントによって使用される GetImage(false) メソッドが Bitmap を返し、後で Stream を使用して Bitmap を JPEG と配列バイトに圧縮することを考えると、簡単なはずです。次に、バイト配列を 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 では機能しません。どんなアイデアや実用的な解決策も大歓迎です。
ありがとう!