签名板Xamarin.Forms将签名另存为文件

时间:2019-02-27 14:32:30

标签: xamarin xamarin.forms signature

我是Xamarin的初学者。 我试图编写一个简单的应用程序来借助Signature Pad保存签名。 来自MainPage.xaml的一段代码

<controls:SignaturePadView x:Name="SignaturePAD"
                           Grid.Row="1" 
                           StrokeColor="Black" 
                           StrokeWidth="3"
                           BackgroundColor="Gray" 
                           CaptionTextColor="Black"
                           PromptTextColor="Black"
                           SignatureLineColor="Black"
                           CaptionText="Podpis odbiorcy">
</controls:SignaturePadView>

<Button Grid.Row="2" 
        x:Name="SaveButton"
        Text="Potwierdź" 
        Clicked="SaveSignature"/>

和MainPage.xaml.cs中的一个片段

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    public async void SaveSignature(object sender, EventArgs e)
    {
        Stream image = await SignaturePAD.GetImageStreamAsync(SignatureImageFormat.Png);

    }

}

我的问题是如何将其保存到手机库中? 我将不胜感激

2 个答案:

答案 0 :(得分:0)

SignaturePad返回一个流-因此您可以使用普通的C#I / O将其写入文件,例如FileStream

Stream image = await SignaturePAD.GetImageStreamAsync(SignatureImageFormat.Png);

using (FileStream file = new FileStream(file_path, FileMode.Create, System.IO.FileAccess.Write))
{
  image.CopyTo(file);
}

答案 1 :(得分:0)

您也许可以在某个地方找到可以帮您实现此目的的插件,但是我会像这样将stream转换为byte[]

using (image)
using (var memoryStream = new MemoryStream())
{
    await image.CopyToAsync(memoryStream);
    var picture = memoryStream.ToArray();
}

然后将byte []转换为每个平台上的本机图片。

对于Android使用:

BitmapFactory.DecodeByteArray(picture, 0, picture.Length);

对于iOS使用:

var nsData = NSData.FromArray(picture);
var uiImage = UIImage.LoadFromData(nsData);

然后,您需要将图像添加到基础画廊。这是一个如何在iOS上实现类似效果的示例:https://developer.xamarin.com/recipes/ios/media/video_and_photos/save_photo_to_album_with_metadata/

对于Android,该帖子可能会有所帮助:Xamarin.Forms Android save image to gallery