c# - 将图像从图像框中保存到 Xamarin 表单中的库
问题描述
有没有办法将图像控件中的图片保存到 Xamarin Forms 中的 Android 库中?感谢所有帮助。
var image = new Image();
image.Source = "test.png";
解决方案
您可以使用Dependency Service
从Resource/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文件并检查文件以进行下次登录?
推荐阅读
- python - python pandas重命名列名以开头
- php - 结束标签与结束标签冲突
- visual-studio-2017 - Visual Studio 2017/2019 Razor 页面键盘快捷键查看 cshtml.cs 文件(代码隐藏)
- java - 为什么 math.ceiling 不四舍五入我的数字?爪哇
- python - 通过单击链接将用户添加到模型
- firebase - 一个文档或一个字段是否在 Cloud Firestore 中计为一次读取?
- node.js - 导出/导入 Nightmare.js 函数
- javascript - 保持物化中显示的范围值
- regex - 带下划线的特殊字符(postgres 中的正则表达式)
- python - 将 FOR LOOP 的所有结果存储在数组中