将内存stream转换为BitmapImage?

我有一个图像最初是一个PNG,我已经转换为一个字节[]并保存在数据库中。 最初,我只是将PNG读入内存stream,并将stream转换为byte []。 现在我想读取byte []并将其转换为BitmapImage,以便可以将WPF图像控件绑定到它。

我在线看到很多矛盾和混乱的代码来完成将byte []转换为BitmapImage的任务。 我不知道是否需要添加任何代码,因为图像最初是PNG。

任何人都可以提供的代码转换为BitmapImage的stream? 谢谢你的帮助。

这应该做到这一点:

using (var stream = new MemoryStream(data)) { var bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.StreamSource = stream; bitmap.CacheOption = BitmapCacheOption.OnLoad; bitmap.EndInit(); bitmap.Freeze(); } 

BitmapCacheOption.OnLoad在这种情况下非常重要 ,因为否则,BitmapImage可能会在按需加载时尝试访问stream,并且stream可能已经closures。

冻结位图是可选的,但如果冻结它,则可以跨线程共享位图,否则这是不可能的。

您不必对图像格式做任何特别的事情 – BitmapImage将处理它。

  using (var stream = new MemoryStream(data)) { var bi = BitmapFrame.Create(stream , BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.OnLoad); }