es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  , , , ,

Answer

  1. Avatar for 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!

Comments are closed.