首页 > 解决方案 > 将图像从图像框中保存到 Xamarin 表单中的库

问题描述

有没有办法将图像控件中的图片保存到 Xamarin Forms 中的 Android 库中?感谢所有帮助。

var image = new Image();
image.Source = "test.png";

截屏

标签: c#androidxamarinxamarin.forms

解决方案


您可以使用Dependency ServiceResource/drawable图像中获取流。

创建 IDependency 接口。

public interface IDependency
{
    MemoryStream DrawableByNameToByteArray(string fileName);
}

安卓实现

public class DependencyImplementation : IDependency
{
    public MemoryStream DrawableByNameToByteArray(string fileName)
    {
        var context = Application.Context;
        using (var drawable = Xamarin.Forms.Platform.Android.ResourceManager.GetDrawable(context, fileName))
        using (var bitmap = ((BitmapDrawable)drawable).Bitmap)
        {
            var stream = new MemoryStream();
            bitmap.Compress(Bitmap.CompressFormat.Png, 100, stream);
            bitmap.Recycle();
            return stream;
        }
    }
}

IOS的实现可以参考SO中的thread。 将图像(从可绘制文件夹)转换为 ByteArray

然后在 Android Mainactivity 中注册。

DependencyService.Register<IDependency, DependencyImplementation>();

如果您的android版本高于android 6.0,您需要运行时权限才能在此问题中存储。请检查Plugin.Permissions具有运行时权限。 https://github.com/jamesmontemagno/PermissionsPlugin

之后,您可以将图像保存到图片内部存储中。

var filename = "";
        var source = image.Source as FileImageSource;
        if (source != null)
        {
            filename = source.File;
        }

        var savingFile = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyPictures);
        //var savingFile1 = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData), "save.png");
        var S = DependencyService.Get<IDependency>().DrawableByNameToByteArray(filename);


        if (!File.Exists(savingFile))
        {
            File.WriteAllBytes(savingFile, S.ToArray());               
        }

在内部存储中,没有 root 权限是看不到文件的。如果你想查看它,你可以使用 adb 工具。请检查链接中的方式。 登录成功时如何将用户名写入本地txt文件并检查文件以进行下次登录?


推荐阅读