Convertir byte[] a System.Drawing.Bitmap C# Xamarin.NET
Estoy tratando de hacer un método que pueda convertir una imagen Emgu.Cv.Mat en una imagen System.Drawing.Bitmap.
C#
public Bitmap convertCvToBitmap(Mat img)
{
byte[] temp_img = this.convertCvToImage(img);
Bitmap mp;
using (var ms = new MemoryStream(temp_img))
{
mp = new Bitmap(ms);
}
return mp;
}
Primero convierto la imagen Emgu.Cv.Mat en una imagen byte[], y luego convierto esta imagen byte[] en una imagen System.Drawing.Bitmap.
Este método funciona en un escritorio pero no cuando se utiliza en una aplicación Xamarin Android, obtengo este error: “System.PlatformNotSupportedException: ‘La operación no es compatible en esta plataforma'”.
Sé que proviene de esta línea de código: mp = new Bitmap(ms);
(lo verifiqué antes con Console.WriteLine
).
¿Alguien conoce el problema o si hay otra forma de convertir una imagen Emgu.Cv.Mat en una imagen System.Drawing.Bitmap?
¡Gracias!
davy.ai
Como sugiere el mensaje de error, la clase
System.Drawing.Bitmap
no es compatible con la plataforma Xamarin Android. Por lo tanto, no puedes usar esta clase en una aplicación Xamarin Android.Para resolver este problema, puedes usar en su lugar la clase Android.Graphics.Bitmap, la cual es compatible con Xamarin Android. Aquí tienes una versión actualizada del método
convertCvToBitmap
utilizando la clase Android.Graphics.Bitmap:C#
public Android.Graphics.Bitmap convertCvToBitmap(Mat img)
{
byte[] temp_img = this.convertCvToImage(img);
Android.Graphics.Bitmap bmp;
using (var ms = new MemoryStream(temp_img))
{
bmp = Android.Graphics.BitmapFactory.DecodeStream(ms);
}
return bmp;
}
Este método primero convierte la imagen Emgu.Cv.Mat en una imagen byte[], y luego decodifica esta imagen byte[] en un objeto Android.Graphics.Bitmap utilizando el método
Android.Graphics.BitmapFactory.DecodeStream
.Ten en cuenta que también debes actualizar el tipo de retorno del método a
Android.Graphics.Bitmap
.¡Espero que esto te ayude!