在我的应用程序中,我让用户选择一个图像(任意大小)。然后,应用程序会将其加载到图像控件中,根据需要调整其大小,并将其显示在屏幕上。
当我使用 Xamarin Forms Plugin.FilePicker 并从中获取字节数组以保存到我的首选项时,我的首选项中的所有保存/加载现在都可以正常工作。
我面临的挑战是,如果用户使用他们设备中的大图像,则图像的大版本是上传到 FilePicker 插件的内容,并且字节数组太大而无法保存。(我收到错误“状态管理器设置值的大小已超出限制。”)
所以我想做的是获取图像控件的内容,这些内容已调整为可管理的大小,将其转换为字节数组,然后将其保存在我的首选项中。
知道如何将图像控件的内容转换为字节数组,以便我可以将其序列化为 JSON 并将其保存到我的偏好中吗?下面是从文件选择器中保存字节数组的代码。
private async void btnChooseFile_Clicked(object sender, System.EventArgs e)
{
try
{
FileData fileData = await CrossFilePicker.Current.PickFile();
if (fileData == null)
return; // user canceled file picking
//lblFilePath.Text = fileData.FileName;
imgIcon.Source = ImageSource.FromStream(() => fileData.GetStream());
// THIS IS THE LINE OF CODE I NEED TO CHANGE TO IT SAVES THE
// BYTE ARRAY OF THE SMALLER IMAGE AS DISPLAYED BY THE
// IMAGE CONTROL INSTEAD OF THE FULL SIZE FILE THE USER
// SELECTED
ViewModelObjects.AppSettings.KioskIcon = fileData.DataArray;
}
catch (Exception ex)
{
System.Console.WriteLine("Exception choosing file: " + ex.ToString());
}
}