在Windows 8.1中使用c#从base64转换为图像

时间:2014-12-19 06:59:36

标签: c# windows-runtime windows-8.1

使用c#windows 8.1 *************从base64转换为图像的任何可执行函数。 我试过了:

public Image byteArrayToImage(byte[] byteArrayIn)
{
    Image returnImage = null;
    using (MemoryStream ms = new MemoryStream(byteArrayIn))
    {
       returnImage = Image.FromStream(ms);
    }
 return returnImage;
}

FromStream不适合Windows 8.1

1 个答案:

答案 0 :(得分:2)

首先,Windows.UI.Xaml.Controls.Image类是控件对象,而不是实际的位图类型对象。你真正想要的是BitmapImage。当然,鉴于这种误解,你可能会遇到代码的其他问题;你没有显示这种方法的调用者,但如果你在这里混淆了这种类型,你可能会把它混淆在别的地方。所以必须修复。

其次,与WinRT中的许多内容一样,执行您想要的操作比使用桌面API时要复杂得多。 :(

那就是说,这样的事情应该有效:

public Windows.UI.Xaml.Media.Imaging.BitmapImage byteArrayToImage(byte[] byteArrayIn)
{
    using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
    {
        await stream.WriteAsync(byteArrayIn.AsBuffer(0, byteArrayIn.Length));
        stream.Seek(0);

        BitmapImage image = new BitmapImage();

        await image.SetSourceAsync(stream);

        return image;
    }
}

然后,您可以将该对象设置为Source控制对象的Image属性。

一些注意事项:

  1. 在您的原始示例中,处理源流至少是非常规的。我的回忆是,至少在某些情况下,这样做是不合法的,因为返回的Bitmap对象要求Stream实例保持不受限制。对于WinRT,在位图初始化之后处理流的AFAIK很好。
  2. AsBuffer()方法是一种扩展方法。如果代码中尚未包含using System.Runtime.InteropServices.WindowsRuntime;,则需要在其中加入{{1}}。
  3. 另见: