Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert System.Windows.Media.ImageSource to ByteArray

Tags:

c#

wpf

is there a way to convert a ImageSource object to byte array? I have an ImageSource object bound to a WPF window, i can convert a byte array from the data base and convert it to ImageSource but i can't do it the reverse way.

Thx in advance.

Edit: I tried to convert ImageSource as BitmapImage but got a null object.

like image 759
Benjamin Martin Avatar asked Mar 31 '15 23:03

Benjamin Martin


1 Answers

Even if your ImageSource is not a BitmapImage you may still successfully cast it to BitmapSource, which is the base class of all WPF bitmap classes like BitmapImage, BitmapFrame, WriteableBitmap, RenderTargetBitmap etc. (see here).

So in case your ImageSource is actually a BitmapSource (and not a DrawingImage or a D3DImage), the following method converts it to a byte array by using the specified BitmapEncoder (e.g. a PngBitmapEncoder):

public byte[] ImageSourceToBytes(BitmapEncoder encoder, ImageSource imageSource)
{
    byte[] bytes = null;
    var bitmapSource = imageSource as BitmapSource;

    if (bitmapSource != null)
    {
        encoder.Frames.Add(BitmapFrame.Create(bitmapSource));

        using (var stream = new MemoryStream())
        {
            encoder.Save(stream);
            bytes = stream.ToArray();
        }
    }

    return bytes;
}
like image 65
Clemens Avatar answered Oct 16 '22 23:10

Clemens