簡體   English   中英

將圖像從圖像框保存到 Xamarin Forms 中的圖庫

[英]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://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/images?tabs=windows#local-images

您可以使用媒體插件,它可以解決您的問題。 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 ServiceResource/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM