【发布时间】:2020-11-01 10:29:56
【问题描述】:
我有以下两种方法来处理从相机拍摄照片和从库中挑选照片。它们都是在每个方法的末尾都相似的方法,我从Stream 得到一个ImageSource,然后我将它传递到另一个页面,该页面准备好设置ImageSource 绑定。这两种方法完美地工作。现在的下一步是将图像保存在 SQLite 中,以便稍后在 ListView 中显示图像。我对 XamGods(Xamarin Pros =)的问题,2019 年在 SQLite 中保存图像的最佳方法是什么?我已经在论坛上呆了好几个小时了,但我仍然对自己想做的事情没有一个狭隘的看法。我也可以
- 将 Stream 转换为字节数组以保存在 Sqlite 中。
- 将 ImageSource 转换为字节数组(混乱/错误)。
- 以某种方式检索实际选择/拍摄的图像并将其转换为字节数组到 SQLite 中
很抱歉,如果我的问题是一般性的,但 Xamarin 没有提供关于如何在 SQLite 中保存图像的明确解决方案,您只能在下面列出的论坛中找到零碎的解决方案。
- How to save and retrieve Image from Sqlite
- Load Image from byte[] array.
- Creating a byte array from a stream
提前谢谢你!
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;
}
}
}
【问题讨论】:
-
不要。将图片保存在文件系统中,并将图片的路径保存在SQLite中。
-
SQLite 是一个轻量级的基于数据库的文件。如果您将图像存储在数据库中,它将使您的数据库操作更加轻松。正如杰森所说,将整个图像存储到数据库中并不是一个好主意。您应该使用设备的文件系统并将图像名称或完整的图像路径存储在数据库中。它会让你的 sqlite 更轻。
标签: sqlite xamarin xamarin.forms