2017-04-04 46 views
1

我想从图库中选择一个图像,它存储在外部。然后我收到OnActivityResult的数据。然后,我想使用这些行来获取所选图像的字节数组数据。Xamarin安卓从图库中获取图像数据

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

可以这样通过与媒体选择器插件进行HTTPS ://blog.xamarin.com/getting-started-with-the-media-plugin-for-xamarin/? – Milen

+0

@Milen我还没有尝试过,但基于我的代码(使用原生Android方法),你能告诉我在那里做错了吗? –

回答

2

I am trying select an image from Gallery, which is stored in external. I then catch the data in OnActivityResult. I, then, want to get the byte array data of the selected image using these lines.

你所得到的ContentUrldata.Data.Path,并File.ReadAllBytes找不到从ContentUrl文件。

如果你想从结果字节数据,您可以创建一个从ContentUrl一个Bitmap,并直接转换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 
    } 
} 
相关问题