Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
543 views
Welcome To Ask or Share your Answers For Others

1 Answer

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;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...