我有一张原本是PNG的图片,我已将其转换为byte []并保存在数据库中。最初,我只是将PNG读入内存流并将流转换为byte []。现在我想要读取byte []并将其转换为BitmapImage,以便我可以将WPF Image控件绑定到它。
我在网上看到很多矛盾和混乱的代码来完成将byte []转换为BitmapImage的任务。我不确定是否需要添加任何代码,因为图像最初是PNG。
任何人都可以提供将流转换为BitmapImage的代码吗?谢谢你的帮助。
答案 0 :(得分:67)
这应该这样做:
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可能会在按需加载时尝试访问流,并且流可能已经关闭。
冻结位图是可选的,但如果你确实冻结它,你可以在线程之间共享位图,否则这是不可能的。
您无需对图像格式做任何特殊处理 - BitmapImage将处理它。
答案 1 :(得分:3)
using (var stream = new MemoryStream(data))
{
var bi = BitmapFrame.Create(stream , BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.OnLoad);
}