link from https://forums.xamarin.com/discussion/155962/how-to-save-and-retrive-image-from-sqlite.
Store: Convert the Image bitmap into a Base64String and store it to SQLite.public static string Base64Encode(string plainText) { var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); return System.Convert.ToBase64String(plainTextBytes); }
Retrieve: Fetch the Base64String and convert that to Bitmap again.public static string Base64Decode(string base64EncodedData) { var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData); return System.Text.Encoding.UTF8.GetString(base64EncodedBytes); }
And how to select image from gallery and save to sql database in xamarin --
if like this, where I to implement these Base64Encode?
`
using Plugin.Media;
using Plugin.Media.Abstractions;
using System;
using Xamarin.Forms;
using SQLite;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace PersonListData
{
public class Person
{
[PrimaryKey, AutoIncrement]
public int IdSis { get; set; }
public string NamePerson { get; set; }
public byte[] PersonImg { get; set; }
}
async void SaveOnClik(object sender, EventArgs e) { var person = (Person)BindingContext; await App.Database.SavePersonAsync(person); await Navigation.PopAsync(); } async void PickPhotos(object sender, EventArgs e) { if (CrossMedia.Current.IsPickPhotoSupported) { var file = await CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions { PhotoSize = PhotoSize.Medium, }); if (file == null) return; image.Source = ImageSource.FromStream(() => { var stream = file.GetStream(); file.Dispose(); return stream; }); } else { await DisplayAlert("Image error", ":( Hcant do thid.", "Ok"); return; } } readonly SQLiteAsyncConnection _database; public DataPerson(string dbPath) { _database = new SQLiteAsyncConnection(dbPath); _database.CreateTableAsync<Person>().Wait(); } public Task<List<Person>> GetPersonListAsync() { return _database.Table<Person>().ToListAsync(); } public Task<Person> GetPersonAsync(int id) { return _database.Table<Person>() .Where(i => i.IdSis == id) .FirstOrDefaultAsync(); } public Task<int> SavePersonAsync(Person person) { if (person.IdSis != 0) { return _database.UpdateAsync(person); } else { return _database.InsertAsync(person); } } public Task<int> DeletePersonAsync(Person person) { return _database.DeleteAsync(person); }
}
`