Xamarin Android从图库

时间:2017-04-04 06:10:10

标签: c# android file xamarin

我正在尝试从Gallery中选择一个存储在外部的图像。然后我在OnActivityResult中捕获数据。然后,我想使用这些行获取所选图像的字节数组数据。

protected override async void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    ...
    var imageSelected = File.ReadAllBytes(data.Data.Path);
    ...
}

然而,我收到以下错误: System.IO.DirectoryNotFoundException: Could not find a part of the path "/external/images/media/149144".

/external/images/media/149144data.Data.Path的值。另请注意,我在androidmanifest中添加了READ_EXTERNAL_STORAGE权限

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

  

我正在尝试从Gallery中选择一个存储在外部的图像。然后我在OnActivityResult中捕获数据。然后,我想使用这些行获取所选图像的字节数组数据。

您从ContentUrl获得data.Data.Path,而File.ReadAllBytes无法从ContentUrl找到文件。

如果要从结果中获取字节数据,可以从Bitmap创建ContentUrl并将Bitmap直接转换为字节数组,如下所示:

protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);

    try
    {
        Bitmap bitmap = MediaStore.Images.Media.GetBitmap(this.ContentResolver, data.Data);
        using (MemoryStream stream = new MemoryStream())
        {
            bitmap.Compress(Bitmap.CompressFormat.Jpeg,100, stream);
            byte[] array=stream.ToArray();
        }

    }
    catch (Java.IO.IOException e)
    {
           //Exception Handling
    }
}