protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); if ((requestCode == PickImageId) && (resultCode == Result.Ok) && (data != null)) { Android.Net.Uri uri = data.Data; //get the selected file using (Android.Runtime.InputStreamInvoker stream = ContentResolver.OpenInputStream(uri) as Android.Runtime.InputStreamInvoker) { //InputStreamInvoker.Position throws a System.NotSupportedException: Specified method is not supported. //stream.Position = 0; //therefore create a new memoryStream using (MemoryStream memoryStream = new MemoryStream()) { stream.CopyTo(memoryStream); memoryStream.Position = 0; using (Image <Rgba32> image = SixLabors.ImageSharp.Image.Load(memoryStream)) //causes the app to crash { var format = SixLabors.ImageSharp.Image.DetectFormat(stream); //var output = new MemoryStream(); //image.Mutate(x => x.Resize(50, 50)); //image.Save(output, format); } } } } }
internal static int GetAvailable(Android.Runtime.InputStreamInvoker stream) { if (stream == null) { return(0); } try { return(stream.BaseInputStream.Available()); } catch (Java.IO.IOException) { } return(0); }
partial void ReadFileFromAssets(string file, ref List <byte> result) { file = file.Replace(EngineNS.CEngine.Instance.FileManager.ProjectRoot, "").ToLower(); Android.Runtime.InputStreamInvoker stream = (Android.Runtime.InputStreamInvoker)AssetManager.Open(file); Type type = stream.GetType(); int len = stream.BaseInputStream.Available(); if (stream != null || len > 0) { byte[] bytes = new byte[len]; stream.Read(bytes, 0, len); stream.Close(); result.AddRange(bytes); } }