将内存流转换为BitmapImage?

Dav*_*man 31 wpf

我有一个原来是PNG的图像,我将其转换为byte []并保存在数据库中.最初,我只是将PNG读入内存流并将流转换为byte [].现在我想要读取byte []并将其转换为BitmapImage,以便我可以将WPF Image控件绑定到它.

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

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

Pat*_*lug 73

这应该这样做:

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

在这种情况下这BitmapCacheOption.OnLoad 很重要,因为否则BitmapImage可能会在按需加载时尝试访问流,并且流可能已经关闭.

冻结位图是可选的,但是如果你确实冻结它,你可以在线程之间共享位图,否则这是不可能的.

您无需对图像格式做任何特殊处理 - BitmapImage将处理它.

  • 关于`BitmapCacheOption.OnLoad`的这一点非常重要.Upvoted,谢谢. (8认同)

And*_*eas 5

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

  • 如果您解释为什么此代码有助于回答用户的问题,将会很有帮助。 (2认同)