【问题标题】:Windows Phone 8.1 get image from base64 stringWindows Phone 8.1 从 base64 字符串获取图像
【发布时间】:2015-06-21 23:22:14
【问题描述】:

如何在 Windows Phone 8.1 上从 base64 字符串获取图像? 如果有帮助,我知道如何解码图像?

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

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

但我没有找到如何从中获取图像的方法。

我找到的所有解决方案都适用于 wfp 或 pre win phone 8.1。 我需要这个才能在 Windows 商店应用程序中工作。 如果可能的话,我不想先将图像保存到磁盘然后加载它。

背景:我在自定义对象中从服务器获取图像(客户签名),其中图像存储为 base64 编码字符串。因此图像不会存储在网站或磁盘上。

更新 建议的答案对我不起作用:( 我对其进行了一些更改以使其能够编译。下面的代码来自建议的答案。

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

但该代码会抛出“找不到组件。(HRESULT 异常:0x88982F50)” 谷歌说这意味着图像格式未知:(

这是我用作输入的字符串之一:

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

我可以在 Windows 窗体应用程序中很好地反编译该字符串:

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

和一个 wpf 应用程序:

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

那为什么我不能让它在 Windows Phone 上运行呢??

【问题讨论】:

  • 请在此处查看此解决方案:stackoverflow.com/questions/14539005/…
  • 感谢您的链接,但我无法让该解决方案正常工作。我收到“找不到组件。(来自 HRESULT 的异常:0x88982F50)”异常

标签: c# image windows-phone-8.1


【解决方案1】:

我找到了一个可行的解决方案!

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

在这里找到解决方案:Load, show, convert image from byte array (database) in Windows Phone 8.1 这里有一个解决方案:http://www.codeproject.com/Tips/804423/Conversion-between-File-Byte-Stream-BitmapImage-an

【讨论】:

  • 谢谢!我发现只有一个适用于 windows phone 应用程序!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 2015-02-07
  • 1970-01-01
  • 2014-07-30
相关资源
最近更新 更多