Je dispose des deux méthodes suivantes, qui permettent de prendre des photos à partir d'un appareil photo et de choisir des photos dans une bibliothèque. Ces deux méthodes sont similaires car, à la fin de chacune d'entre elles, j'obtiens un message d'erreur ImageSource
de retour de la Stream
et je le passe à une autre page qui a une ImageSource
liaison prête à être mise en place. Ces deux méthodes fonctionnent parfaitement. L'étape suivante consiste maintenant à sauvegarder l'image dans SQLite afin de pouvoir afficher les images dans un ListView par la suite. Ma question pour les XamGods (Xamarin Pros =), quelle est la meilleure façon de sauvegarder une image dans SQLite en 2019 ? J'ai été dans les forums pendant des heures et je n'ai toujours pas une vision tunnel sur ce que je veux faire. Je peux soit
- Convertit Stream en un tableau d'octets à sauvegarder dans Sqlite.
- Convertit ImageSource en un tableau d'octets (désordonné/buggy).
- Récupérer l'image sélectionnée/prise et la convertir en un tableau d'octets dans SQLite.
Je suis désolé si ma question est générale, mais Xamarin ne fournit pas de solution claire sur la façon de sauvegarder des images dans SQLite et vous ne pouvez trouver que des bribes de solutions dans les forums listés ci-dessous.
- Comment sauvegarder et récupérer une image à partir de Sqlite ?
- Charger une image à partir d'un tableau d'octets[].
- Création d'un tableau d'octets à partir d'un flux
Merci d'avance !
private async Task OnAddPhotoFromCameraSelected()
{
Console.WriteLine("OnAddPhotoFromCameraSelected");
var photo = await Plugin.Media.CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions() { });
var stream = photo.GetStream();
photo.Dispose();
if (stream != null)
{
ImageSource cameraPhotoImage = ImageSource.FromStream(() => stream);
var parms = new NavigationParameters();
parms.Add("image", cameraPhotoImage);
var result = await NavigationService.NavigateAsync("/AddInspectionPhotoPage?", parameters: parms);
if (!result.Success)
{
throw result.Exception;
}
}
}
private async Task OnAddPhotoFromLibrarySelected()
{
Console.WriteLine("OnAddPhotoFromLibrarySelected");
Stream stream = await DependencyService.Get<IPhotoPickerService>().GetImageStreamAsync();
if (stream != null)
{
ImageSource selectedImage = ImageSource.FromStream(() => stream);
var parms = new NavigationParameters();
parms.Add("image", selectedImage);
parms.Add("stream", stream);
var result = await NavigationService.NavigateAsync("/AddInspectionPhotoPage?", parameters: parms);
if (!result.Success)
{
throw result.Exception;
}
}
}