Crear una imagen de bitmap a partir de una matriz de bytes

Estoy creando una matriz de bytes con valores arbitrarios y quiero convertirla en una imagen de bitmap.

bi = new BitmapImage(); using (MemoryStream stream = new MemoryStream(data)) { try { bi.BeginInit(); bi.CacheOption = BitmapCacheOption.OnLoad; bi.StreamSource = stream; bi.DecodePixelWidth = width; bi.EndInit(); } catch (Exception ex) { return null; } } 

Este código me da una NotSupportedException todo el tiempo. ¿Cómo podría crear un BitmapSource desde cualquier matriz de bytes?

Dado un conjunto de bytes donde cada byte representa un valor de píxel, puede crear un bitmap en escala de grises como se muestra a continuación. Debe especificar el ancho y alto del bitmap, y eso debe coincidir, por supuesto, con el tamaño del búfer.

 byte[] buffer = ... // must be at least 10000 bytes long in this example var width = 100; // for example var height = 100; // for example var dpiX = 96d; var dpiY = 96d; var pixelFormat = PixelFormats.Gray8; // grayscale bitmap var bytesPerPixel = (pixelFormat.BitsPerPixel + 7) / 8; // == 1 in this example var stride = bytesPerPixel * width; // == width in this example var bitmap = BitmapSource.Create(width, height, dpiX, dpiY, pixelFormat, null, buffer, stride); 

Cada valor de byte también puede representar un índice en una paleta de colores, en cuyo caso deberá especificar PixelFormats.Indexed8 y, por supuesto, pasar una paleta de colores apropiada.

La matriz de bytes debe contener datos de imagen válidos (PNG / JPG / BMP). Si elimina el bloque de uso y los datos son válidos, entonces su Código debería funcionar. BitmapImage no parece cargar la imagen inmediatamente, por lo que no puede cargarla después porque la transmisión ya está eliminada.

¿Qué quiere decir con “valores arbitrarios”? ¿Valores aleatorios RGB? Luego propongo usar la clase Bitmap y guardar el Bitmap resultante en un Memorystream.

Si solo desea vincular un byte [] a un control de imagen en su interfaz de usuario: enlace directamente a la matriz. Funciona sin un convertidor.