Xamarin Forms 将 ImageSource 转换为实际的 png 图像并存储在设备上



有没有办法将 ImageSource(从 api 调用中提取)转换为设备上的实际 png 文件,然后在以后需要时将其作为 FileImageSource 访问?我想实现图像的缓存,以便我的应用程序不依赖于网络。

iOS

NSData imgData = null;
var renderer = new Xamarin.Forms.Platform.iOS.StreamImagesourceHandler ();
UIKit.UIImage photo = await renderer.LoadImageAsync (img);
var savedImageFilename = System.IO.Path.Combine (directory, filename);
NSFileManager.DefaultManager.CreateDirectory(directory, true, null);
if (System.IO.Path.GetExtension (filename).ToLower () == ".png")
    imgData = photo.AsPNG ();
else
    imgData = photo.AsJPEG (100);
NSError err = null;
imgData.Save (savedImageFilename, NSDataWritingOptions.Atomic, out err)

人造人

System.IO.Stream outputStream = null;
var renderer = new Xamarin.Forms.Platform.Android.StreamImagesourceHandler ();
Bitmap photo = await renderer.LoadImageAsync (img, Forms.Context);
var savedImageFilename = System.IO.Path.Combine (directory, filename);
System.IO.Directory.CreateDirectory(directory);
bool success = false;
using (outputStream = new System.IO.FileStream(savedImageFilename, System.IO.FileMode.Create))
{
    if (System.IO.Path.GetExtension (filename).ToLower () == ".png")
        success = await photo.CompressAsync(Bitmap.CompressFormat.Png, 100, outputStream);
    else
        success = await photo.CompressAsync(Bitmap.CompressFormat.Jpeg, 100, outputStream);
}

您可能希望将其声明为在公共项目中抽象并在每个平台中实现的依赖项服务,该服务将具有如下方法:

Task<bool> SaveImage(string directory, string filename, ImageSource img);

最新更新