error en mi byte [] para la conversión de WPF BitmapImage?
-
28-09-2019 - |
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;
}
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]