[英]Save image from an image box to gallery in Xamarin Forms
有沒有辦法將圖像控件中的圖片保存到 Xamarin Forms 中的 Android 庫中? 感謝所有幫助。
var image = new Image();
image.Source = "test.png";
只需使用drawable的“文件名”,它就會被加載:
所以在你的例子中:
image.Source = "test.png";
要在所有應用程序中使用單個圖像,必須在每個平台上使用相同的文件名,並且它應該是有效的 Android 資源名稱(即只允許小寫字母、數字、下划線和句點) 。
Android - 使用 Build Action: AndroidResource 將圖像放置在 Resources/drawable 目錄中。 還可以提供圖像的高和低 DPI 版本(在適當命名的資源子目錄中,例如 drawable-ldpi、drawable-hdpi 和 drawable-xhdpi)。
您可以使用媒體插件,它可以解決您的問題。 https://github.com/jamesmontemagno/MediaPlugin
您可以訪問上面的鏈接。
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
圖像中獲取 stream。
創建 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 中的線程。 將圖像(從可繪制文件夾)轉換為 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文件並檢查文件以進行下次登錄?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.