16
public Image Base64ToImage(string base64String)
    {
        // Convert Base64 String to byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        MemoryStream ms = new MemoryStream(imageBytes, 0,
          imageBytes.Length);

        // Convert byte[] to Image
        ms.Write(imageBytes, 0, imageBytes.Length);
        System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
        return image;
    }

I want to convert byte[] to image, however System.Drawing.Image is not supported in Silverlight. Any alternative?

MPelletier
  • 16,256
  • 15
  • 86
  • 137
xscape
  • 3,318
  • 9
  • 45
  • 86

3 Answers3

22

You need to create an ImageSource and assign that to an Image control or use an ImageBrush to set on the background. BitmapImage is located in the System.Windows.Media.Imaging namespace.

        byte[] imageBytes = Convert.FromBase64String(base64String);
        using (MemoryStream ms = new MemoryStream(imageBytes, 0,
          imageBytes.Length))
        {
            BitmapImage im = new BitmapImage();
            im.SetSource(ms);
            this.imageControl.Source = im;
        }

or for the ImageBrush

        byte[] imageBytes = Convert.FromBase64String(base64String);
        using (MemoryStream ms = new MemoryStream(imageBytes, 0,
          imageBytes.Length))
        {
            BitmapImage im = new BitmapImage();
            im.SetSource(ms);
            imageBrush.ImageSource = im;
            this.BoxBorder.Background = imageBrush;
        }
nyxtom
  • 2,919
  • 2
  • 23
  • 24
  • 1
    Why do you need to write the imageBytes to MemoryStream using the Write method? Aren't they put in from the ctor? Shouldn't im.SetSource(stream) be im.SetSource(ms)? – DaveB Mar 15 '10 at 17:15
  • Oh yea, I just reused the original code that he had above for convenience, but now looking at it - it is a bit off. – nyxtom Mar 17 '10 at 16:16
3

this code can convert image to byte[]

BitmapImage imageSource = new BitmapImage();
Stream stream = openFileDialog1.File.OpenRead();
BinaryReader binaryReader = new BinaryReader(stream);
currentImageInBytes = new byte[0];

currentImageInBytes = binaryReader.ReadBytes((int)stream.Length);
stream.Position = 0;
imageSource.SetSource(stream);

and this code can convert byte[] to image

public void Base64ToImage(byte[] imageBytes)
{

    using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
    {
        BitmapImage im = new BitmapImage();
        im.SetSource(ms);
        img.Source = im;
    }
}
Shef
  • 44,808
  • 15
  • 79
  • 90
shima
  • 49
  • 4
0

An other way:

    public static BitmapImage ConvertStreamToImage(Stream stream)
    {
        BitmapImage _resultImage = new BitmapImage();

        _resultImage.SetSource(stream);

        return _resultImage;
    }

which uses these name spaces: using System.IO; using System.Windows.Media.Imaging;

Taghvajou
  • 64
  • 5