【问题标题】:How can I call a method from another namespace and pass data如何从另一个命名空间调用方法并传递数据
【发布时间】:2021-01-14 05:46:22
【问题描述】:

我想传递一个 SKImage 和一个字符串文件名来将图片保存到手机的目录中。

我要调用的方法:

namespace LevelMeter.Droid
{
    public class SaveImage_Droid : SaveImage
    {
        public SaveImage_Droid(SKImage snapshot, string fileName)
        {
            SaveImage(snapshot, fileName);
        }

        public void SaveImage(SKImage snapshot, string fileName)
        {
            var pictures = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).AbsolutePath;

            Bitmap bm = snapshot.ToBitmap();

            var filePath = System.IO.Path.Combine(pictures, fileName);
            var stream = new FileStream(filePath, FileMode.Create);
            bm.Compress(Bitmap.CompressFormat.Jpeg, 90, stream);
            stream.Flush();
            stream.Close();
        }
    }
}

我做了这个界面:

namespace LevelMeter
{
    public interface SaveImage
    {
        void SaveImage(SKImage snapshot, string fileName);
    }
}

我想调用它

namespace LevelMeter.Views
{
    public void SaveButton_Clicked(object sender, EventArgs e)
    {
        SKImage snapshot = surface.Snapshot();
        string fileName = System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";
        SaveImage(snapshot, fileName); //I cant't reach it
    }
}

【问题讨论】:

  • 你应该可以直接在你的 .NET Standard 项目中这样做,在 Android 项目中不需要这样做
  • 但是Bitmap用的是Android.Graphics,有没有别的办法?
  • Skia 可以为您创建 jpg
  • 谢谢。我知道了,我怎样才能将 Android.OS.Enviroment.GetExternalStorage.... 部分加入我的标准项目?
  • 试过System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyPictures)?

标签: xamarin methods bitmap gallery


【解决方案1】:

您可以使用DependencyService从共享项目调用方法到.Android项目:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

    }

    public void SaveButton_Clicked(object sender, EventArgs e)
    {
        SKImage snapshot = surface.Snapshot();
        string fileName = System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";

        DependencyService.Get<ISaveImage>().SaveImage(snapshot, fileName);
    }
}

public interface ISaveImage
{
    void SaveImage(SKImage snapshot, string fileName);
}

在 Android 项目中,注册它:Registration by attribute

[assembly: Dependency(typeof(SaveImage_Droid))]
namespace LevelMeter.Droid
{
    public class SaveImage_Droid : SaveImage
    {
        public SaveImage_Droid(SKImage snapshot, string fileName)
        {
            SaveImage(snapshot, fileName);
        }

        public void SaveImage(SKImage snapshot, string fileName)
        {
            var pictures = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).AbsolutePath;

            Bitmap bm = snapshot.ToBitmap();

            var filePath = System.IO.Path.Combine(pictures, fileName);
            var stream = new FileStream(filePath, FileMode.Create);
            bm.Compress(Bitmap.CompressFormat.Jpeg, 90, stream);
            stream.Flush();
            stream.Close();
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 2013-03-25
    • 2019-06-02
    • 2021-01-06
    • 2016-06-22
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多