2017-04-04 134 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 
    } 
}