Windows Phone 8.1 get image from base64 string

1

How can i get an Image from a base64 string on Windows Phone 8.1? I know how to decode the image if that helps?

var imageBytes = Convert.FromBase64String(base64StringWithImageData);
var ms = new MemoryStream(imageBytes, 0, imageBytes.Length);

var decoder = await BitmapDecoder.CreateAsync(BitmapDecoder.PngDecoderId, ms.AsRandomAccessStream());

But nowhere have i found how i can get a Image from any of that.

All of the solutions i have found are for wfp or pre win phone 8.1. I need this to work in a windows store app. If possible i don't want to save the image to disk first and then load it.

Background: I get Images (customer signatures) from the server in custom objects where images are stored as base64 encoded strings. So the images aren't stores on a website or on disk.

Update The answer that was suggested doesn't work for me :( I changed it a little to get it to compile. The code below is from the suggested answer.

var imageBytes = Convert.FromBase64String(_orderEntity.Signature);
using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
{
   ms.Write(imageBytes, 0, imageBytes.Length);
   var bitmapImage = new BitmapImage();
   await bitmapImage.SetSourceAsync(ms.AsRandomAccessStream());
   signatureImage.Source = bitmapImage;
 }

But that code throws a "The component cannot be found. (Exception from HRESULT: 0x88982F50)" Google sais that means that the image format is unknown :(

This is (one of) the strings i use as input:

"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"

I can decompile that string just fine in both a windows Form app:

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

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

and a wpf app:

public static Image Base64ToImage(string base64String)
    {
        try
        {
            byte[] binaryData = Convert.FromBase64String(base64String);

            BitmapImage bi = new BitmapImage();
            bi.BeginInit();
            bi.StreamSource = new MemoryStream(binaryData);
            bi.EndInit();

            Image img = new Image();
            img.Source = bi;
            return img;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }
        return new Image();
    }

So why cant i get it to work on Windows Phone??

c#
image
windows-phone-8.1
asked on Stack Overflow Jun 18, 2015 by merger • edited Jun 18, 2015 by merger

1 Answer

2

I found a solution that works!

var imageBytes = Convert.FromBase64String(base64String);
using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream())
{
    using (DataWriter writer = new DataWriter(ms.GetOutputStreamAt(0)))
    {
        writer.WriteBytes((byte[])imageBytes);
        writer.StoreAsync().GetResults();
    }

    var image = new BitmapImage();
    image.SetSource(ms);
}

Found the solution here: Load, show, convert image from byte array (database) in Windows Phone 8.1 and there is a the solution here: http://www.codeproject.com/Tips/804423/Conversion-between-File-Byte-Stream-BitmapImage-an

answered on Stack Overflow Jun 19, 2015 by merger • edited May 23, 2017 by Community

User contributions licensed under CC BY-SA 3.0