BitmapImage to byte

Tengo un BitmapImage que estoy usando en una aplicación WPF, luego deseo guardarlo en una base de datos como una matriz de bytes (supongo que es la mejor manera), ¿cómo puedo realizar esta conversión?

O, como alternativa, ¿existe una mejor manera de guardar un BitmapImage (o cualquiera de sus clases base, BitmapSource o ImageSource ) en un repository de datos?

Para convertir a un byte [], puede usar un MemoryStream:

 byte[] data; JpegBitmapEncoder encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bitmapImage)); using(MemoryStream ms = new MemoryStream()) { encoder.Save(ms); data = ms.ToArray(); } 

En lugar de JpegBitmapEncoder puede usar cualquier BitmapEncoder que quiera como dijo CasperOne.

Si está utilizando MS SQL, también podría usar una image -Columna, ya que MS SQL admite ese tipo de datos, pero igual tendría que convertir el BitmapImage de alguna manera.

Tendrá que usar una instancia de una clase que se deriva de BitmapEncoder (como BmpBitmapEncoder ) y llamar al método Save para guardar el BitmapSource en un Stream .

Debería elegir el codificador específico según el formato en el que desea guardar la imagen.

escríbalo en un MemoryStream , luego puedes acceder a los bytes desde allí. algo así como esto:

 public Byte[] ImageToByte(BitmapImage imageSource) { Stream stream = imageSource.StreamSource; Byte[] buffer = null; if (stream != null && stream.Length > 0) { using (BinaryReader br = new BinaryReader(stream)) { buffer = br.ReadBytes((Int32)stream.Length); } } return buffer; } 

Solo usa un MemoryStream.

 byte[] data = null; using(MemoryStream ms = new MemoryStream()) { bitmapImage.Save(ms); data = ms.ToArray(); }
byte[] data = null; using(MemoryStream ms = new MemoryStream()) { bitmapImage.Save(ms); data = ms.ToArray(); }