J'utilise un bloc Signature pour les formulaires Xamarin et j'essaie de définir la signature sur une source d'image. J'essaye de convertir le flux en ByteArray mais le bytearray converti est toujours vide.Flux vers ByteArray - Convertir le bloc-signature en image
Dans la fonction ReadFully J'ai essayé deux approches, mais les deux 0 octets de retour
Pourriez-vous s'il vous plaît suggérer où je me trompe.
J'ai regardé sur Internet ont trouvé ces liens
https://forums.xamarin.com/discussion/19853/load-image-form-byte-array
XAML
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Radical.Views.DocketSignaturePad"
xmlns:acr="clr-namespace:Acr.XamForms.SignaturePad;assembly=Acr.XamForms.SignaturePad"
Title="DocketSignaturePad">
<ScrollView>
<StackLayout Padding="10">
<acr:SignaturePadView
x:Name="padView"
HeightRequest="320"
WidthRequest="240"
BackgroundColor="White"
CaptionText="Caption This"
CaptionTextColor="Black"
ClearText="Clear Me!"
ClearTextColor="Red"
PromptText="Prompt Here"
PromptTextColor="Red"
SignatureLineColor="Aqua"
StrokeColor="Black"
StrokeWidth="2"
/>
<Button Clicked="OnChangeTheme" Text="Change Theme" />
<Button Clicked="SaveSignature" Text="Save signature"/>
<Image x:Name="signatureImage" WidthRequest="300" HeightRequest="100" BackgroundColor="Blue"/>
</StackLayout>
</ScrollView>
</ContentPage>
Xaml.cs
async void SaveSignature(object sender, EventArgs e)
{
List<DrawPoint> signaturePoints = padView.GetDrawPoints().ToList();
if (signaturePoints.Count > 0)
{
Stream imageAsBytes = new MemoryStream(ReadFully(padView.GetImage(ImageFormatType.Jpg)));
signatureImage.Source = ImageSource.FromStream(() => new MemoryStream(ReadFully(padView.GetImage(ImageFormatType.Jpg))));
}
}
public static byte[] ReadFully(Stream input)
{
using (MemoryStream ms = new MemoryStream())
{
input.CopyTo(ms);
return ms.ToArray();
}
//byte[] buffer = new byte[16 * 1024];
//using (MemoryStream ms = new MemoryStream())
//{
// int read;
// while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
// {
// ms.Write(buffer, 0, read);
// }
// return ms.ToArray();
//}
}
Je pense que ce contrôle est assez vieux. Avez-vous essayé Xamarin.Controls.SignaturePad? –
Non, je n'ai pas, mais est quelque chose de mal avec la fonction ReadFully car il ne peut pas convertir correctement – BRDroid
Quelle plate-forme vous êtes en train de tester? Je vais essayer de reproduire –