MediaPlugin - 从路径获取MediaFile

时间:2017-05-23 10:20:19

标签: c# arrays xamarin xamarin.forms

这可能是一个简单的问题,但我无法让它发挥作用。 使用TakePhotoAsync()从相机设置图片没有问题。

问题是我将图片上传到BlobStorage,我想从Blob Byte数组中获取Plugin.Media.Abstractions.MediaFile。 类似的东西:

MediaFile file = new MediaFile(...);

有谁知道怎么做?

提前致谢

编辑:基于答案,我的问题似乎不够明确。 我可以拍照并将其上传到blob存储区。

这是我想做的反面而不是如何看待。 我想从Blob存储中下载图片,我将其作为字节数组获取,然后从中获取MediaFile。

3 个答案:

答案 0 :(得分:1)

您可以通过提供Func来返回字节数组的流来实现:

var image = new MediaFile("C:\fake-blob-filename.jpg", () =>
            {
                new MemoryStream(blobBytes); // Your byte array is the argument
            });

答案 1 :(得分:0)

首先,您需要使用此代码拍摄图像:

EventImageFile = await CrossMedia.Current.TakePhotoAsync(
                        new StoreCameraMediaOptions
                        {
                            SaveToAlbum = true,
                            Directory = "your directory name",
                            Name = DateTime.Now + ".jpg",
                            DefaultCamera = CameraDevice.Rear,
                            //CompressionQuality = 10
                        });

然后你可以使用这段代码将它转换为byte []:

private byte[] ConvertMediaFileToByteArray(MediaFile file)
{
    using (var memoryStream = new MemoryStream())
    {
        file.GetStream().CopyTo(memoryStream);
        return memoryStream.ToArray();
    }
}

将你的byte []发布到blob存储

答案 2 :(得分:0)

要从blob下载图像,请使用HttpClient并将其下载为Byte数组。 获得阵列后,您可以将其保存到您的应用具有权限的任何文件夹中。 当你保存它时,你应该有相同的路径。 您可以使用路径通过“图像”视图或“媒体选择器”加载图像。