Pregunta

estoy ahorrando un BitmapImage a un byte [] para guardar en una base de datos. Estoy bastante seguro de que los datos están siendo guardar y recuperar con precisión lo que no es un problema allí.

En mi byte [] a la conversión BitmapImage me siguen dando una excepción de "System.NotSupportedException:. No se Imaging Component adecuada para completar esta operación fue encontrado"

Puede alguien ver lo que estoy haciendo mal con mis dos funciones aquí?

  private Byte[] convertBitmapImageToBytestream(BitmapImage bi)
  {
     int height = bi.PixelHeight;
     int width = bi.PixelWidth;
     int stride = width * ((bi.Format.BitsPerPixel + 7) / 8);

     Byte[] bits = new Byte[height * stride];
     bi.CopyPixels(bits, stride, 0);

     return bits;
  }

  public BitmapImage convertByteToBitmapImage(Byte[] bytes)
  {
     MemoryStream stream = new MemoryStream(bytes);
     stream.Position = 0;
     BitmapImage bi = new BitmapImage();
     bi.BeginInit();
     bi.StreamSource = stream;
     bi.EndInit();
     return bi;
  }
¿Fue útil?

Solución 3

Ahora resulta que el copyPixels BitmapImage no está bien. Me tomo la salida del BitmapImage y convertirlo en algo útil en este caso un jpg.

public static Byte[] convertBitmapImageToBytestream(BitmapImage bi)
  {
     MemoryStream memStream = new MemoryStream();
     JpegBitmapEncoder encoder = new JpegBitmapEncoder();
     encoder.Frames.Add(BitmapFrame.Create(bi));
     encoder.Save(memStream);
     byte[] bytestream = memStream.GetBuffer();
     return bytestream;
  }

Otros consejos

¿Esta pregunta StackOverflow ayuda?

byte [] para BitmapImage en silverlight

EDIT:

Prueba de esto, no estoy seguro de que funcione:

public BitmapImage convertByteToBitmapImage(Byte[] bytes)
{
    MemoryStream stream = new MemoryStream(bytes);
    stream.Position = 0;
    BitmapImage bi = new BitmapImage();
    bi.BeginInit();
    bi.CacheOption = BitmapCacheOption.OnLoad;
    bi.DecodePixelWidth = ??; // Width of the image
    bi.StreamSource = stream;
    bi.EndInit();
    return bi;
}

ACTUALIZACIÓN 2:

He encontrado estos:

cargar un byte [] en una imagen en tiempo de ejecución

BitmapImage de byte [] en un no UIThread

Aparte de eso, no sé.

¿Cómo se sabe que el byte [] formato que está creando es lo que el BI espera en la Corriente? ¿Por qué no se utiliza el BitmapImage.StreamSource para crear el byte [] que guarde? A continuación, conoce el formato será compatible.

http://www.codeproject.com/KB/vb/BmpImage2ByteArray.aspx

http: / /social.msdn.microsoft.com/forums/en-US/wpf/thread/8327dd31-2db1-4daa-a81c-aff60b63fee6/

[no probé ninguna de este código, pero se puede]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top