【问题标题】:Convert Image (from drawable folder) to ByteArray将图像(从可绘制文件夹)转换为 ByteArray
【发布时间】:2019-02-01 17:25:15
【问题描述】:

所以,我对我的代码感到困惑。我正在尝试在我的应用程序中创建一个分享按钮,以将一些图像分享给其他应用程序。

一个工作的朋友与我分享了他使用的相同代码,他获取图像的字节数组并将其传递给 DependencyService,但他已经在 ByteArray 中有他的图像,在我的情况下,我的图像都存储在资源中/drawable 文件夹。

我们试图做但做不到的是从可绘制文件夹中获取图像并将其转换为 ByteArray。

private void ShareImage(object sender, EventArgs e)
{
    //Convert img to ByteArray


    //ShareWindow
    DependencyService.Get<IShare>().Share("", "", buffer);
}

例如,如何将位于“Resources/drawable”(Android 和 iOS 项目)内的名为“MyImage1.png”的图像转换为 ByteArray?看起来这是唯一缺少此按钮的功能。

谢谢!

【问题讨论】:

    标签: c# xamarin xamarin.forms xamarin.ios xamarin.android


    【解决方案1】:

    您可以通过 DependencyService 调用这些。

    安卓

    public byte[] 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.ToArray();
        }
    }
    

    iOS

    public byte[] iOSBundleResourceByNameToByteArray(string fileName)
    {
        using (var image = UIImage.FromFile(fileName))
        using (NSData imageData = image.AsPNG())
        {
            var byteArray = new byte[imageData.Length];
            System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes, byteArray, 0, Convert.ToInt32(imageData.Length));
            return byteArray;
        }
    }
    

    注意:传递 byte[] 效率非常低,流更好,但由于您使用的是本机“共享”功能,因此最好使用原始文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 2012-02-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      相关资源
      最近更新 更多