xamarin手写签名

需要安装nuget包:

Xamarin.Controls.SignaturePad.Forms

前台关键代码:

<Grid x:Name="LayoutRoot" Padding="12">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*" />
                        <RowDefinition Height="12" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <ContentView Padding="1" BackgroundColor="#B8860B">
                        <controls:SignaturePadView x:Name="signatureView" SignatureLineColor="Transparent"
                            PromptText="" CaptionText="" ClearText="清空" HeightRequest="100" ClearTextColor="#B8860B" BackgroundColor="#FAFAD2" />
                    </ContentView>                   
                    <Button  x:Name="btnLoad" Text="数据库最新签名" Clicked="LoadVectorClicked"
                    HorizontalOptions="Center" VerticalOptions="End" Grid.Row="2" />
                    <Button x:Name="btnSaveImage" Text="保存签名" Clicked="SaveImageClicked"
                    HorizontalOptions="End" VerticalOptions="End" Grid.Row="2" />
                </Grid>
 xmlns:controls="clr-namespace:SignaturePad.Forms;assembly=SignaturePad.Forms"

后台关键代码:

        /// <summary>
        /// 从数据库加载保存的图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void LoadVectorClicked(object sender, EventArgs e)
        {
            var bytes = Context.TestImageEntry.OrderByDescending(r=>r.Id).FirstOrDefault().SignatureImg;
            var stream = new MemoryStream(bytes);
            mImge.Source = ImageSource.FromStream(() => stream);
        }

        private async void SaveImageClicked(object sender, EventArgs e)
        {
            bool saved;
            using (var bitmap = await signatureView.GetImageStreamAsync(SignatureImageFormat.Png, Color.Black, Color.White, 1f))
            {
                saved = await OnSaveSignature(bitmap);
            }

            if (saved)
                await DisplayAlert("Signature Pad", "签名保存成功.", "OK");
            else
                await DisplayAlert("Signature Pad", "签名保存失败.", "OK");
        }


        /// <summary>
        /// 保存图片到数据库
        /// </summary>
        /// <param name="bitmap"></param>
        /// <returns></returns>
        private async Task<bool> OnSaveSignature(Stream bitmap)
        {
            using MemoryStream ms = new MemoryStream();
            bitmap.CopyTo(ms);

            Context.TestImageEntry.Add(new Models.Entity.TestImageEntry { SignatureImg = ms.ToArray() });
            await Context.SaveChangesAsync();

            return true;
        }

 运行起来的效果:

参考:https://github.com/wx0322/SignaturePad (从官网fork过来的)

(完)

原文地址:https://www.cnblogs.com/lishidefengchen/p/14658958.html