从 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
首先,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
属性。
一些注意事项:
- 在原始示例中,释放源流至少是非常规的。我的记忆是,至少在某些情况下,这样做是不合法的,因为返回的
Bitmap
对象要求Stream
实例保持未释放状态。对于 WinRT,AFAIK 可以在初始化位图后释放流。 AsBuffer()
方法是一种扩展方法。您需要在代码中包含using System.Runtime.InteropServices.WindowsRuntime;
(如果它尚不存在才能正常工作(。
另请参阅:
- 位图源类
- InMemoryRandomAccessStream 类
- WindowsRuntimeBufferExtensions 类