从 base64 到 Windows 8.1 中使用 C# 的图像

本文关键字:图像 base64 Windows | 更新日期: 2023-09-27 18:34:38

任何使用 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

从 base64 到 Windows 8.1 中使用 C# 的图像

首先,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;
    }
}

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

一些注意事项:

  1. 在原始示例中,释放源流至少是非常规的。我的记忆是,至少在某些情况下,这样做是不合法的,因为返回的Bitmap对象要求Stream实例保持未释放状态。对于 WinRT,AFAIK 可以在初始化位图释放流。
  2. AsBuffer()方法是一种扩展方法。您需要在代码中包含using System.Runtime.InteropServices.WindowsRuntime;(如果它尚不存在才能正常工作(。

另请参阅:

  • 位图源类
  • InMemoryRandomAccessStream 类
  • WindowsRuntimeBufferExtensions 类