C# 以Xamarin表单将图像从图像框保存到库
有没有办法将图像控件中的图片以Xamarin格式保存到Android gallery?感谢所有的帮助C# 以Xamarin表单将图像从图像框保存到库,c#,android,xamarin,xamarin.forms,C#,Android,Xamarin,Xamarin.forms,有没有办法将图像控件中的图片以Xamarin格式保存到Android gallery?感谢所有的帮助 var image = new Image(); image.Source = "test.png"; 您可以使用媒体插件,它可以解决您的问题 您可以访问上面的链接 takePhoto.Clicked += async (sender, args) => { await CrossMedia.Current.Initialize(); if (!CrossMedia.C
var image = new Image();
image.Source = "test.png";
您可以使用媒体插件,它可以解决您的问题 您可以访问上面的链接
takePhoto.Clicked += async (sender, args) =>
{
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
DisplayAlert("No Camera", ":( No camera available.", "OK");
return;
}
var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
{
Directory = "Sample",
Name = "test.jpg"
});
if (file == null)
return;
await DisplayAlert("File Location", file.Path, "OK");
image.Source = ImageSource.FromStream(() =>
{
var stream = file.GetStream();
return stream;
});
};
您可以使用
Dependency Service
从Resource/drawable
图像获取流
创建IDependency接口
public interface IDependency
{
MemoryStream DrawableByNameToByteArray(string fileName);
}
Android实现
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中的线程。
然后在Android Mainactivity中注册
DependencyService.Register<IDependency, DependencyImplementation>();
在内部存储中,如果没有root权限,则无法查看文件。
如果您想查看它,可以使用adb工具。
请在链接中检查路径。
好的,您能提供一些示例代码吗?对不起,我对Xamarin表单还是相当陌生的。谢谢你的回复!我不是想拍照。我正在尝试将图片框中的照片保存到图库中。
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());
}