convert array of bytes to bitmapimage

arrays, bitmapimage, c#, wpf

Solution

In the first code example the stream is closed (by leaving the `using` block) before the image is actually loaded. You must also set BitmapCacheOptions.OnLoad to achieve that the image is loaded immediately, otherwise the stream needs to be kept open, as in your second example.

public BitmapImage ToImage(byte[] array)
{
    using (var ms = new System.IO.MemoryStream(array))
    {
        var image = new BitmapImage();
        image.BeginInit();
        image.CacheOption = BitmapCacheOption.OnLoad; // here
        image.StreamSource = ms;
        image.EndInit();
        return image;
    }
}

From the Remarks section in BitmapImage.StreamSource:

Set the CacheOption property to BitmapCacheOption.OnLoad if you wish to close the stream after the BitmapImage is created.

Besides that, you can also use built-in type conversion to convert from type `byte[]` to type `ImageSource` (or the derived `BitmapSource`):

var bitmap = (BitmapSource)new ImageSourceConverter().ConvertFrom(array);

ImageSourceConverter is called implicitly when you bind a property of type `ImageSource` (e.g. the Image control's `Source` property) to a source property of type `string`, `Uri` or `byte[]`.

Problem

I'm going to convert array of bytes to `System.Windows.Media.Imaging.BitmapImage` and show the `BitmapImage` in an image control. When I'm using the first code, noting happens! no error and no image is displayed. But when I'm using the second one it works fine! can anyone say what is going on? first code is here: ``` public BitmapImage ToImage(byte[] array) { using (System.IO.MemoryStream ms = new System.IO.MemoryStream(array)) { BitmapImage image = new BitmapImage(); image.BeginInit(); image.StreamSource = ms; image.EndInit(); return image; } } ``` second code is here: ``` public BitmapImage ToImage(byte[] array) { BitmapImage image = new BitmapImage(); image.BeginInit(); image.StreamSource = new System.IO.MemoryStream(array); image.EndInit(); return image; } ```

Original source

Related problems