我有一个最初是 PNG 的图像,我已将其转换为 byte[] 并保存在数据库中。最初,我只是简单地将 PNG 读入内存流,然后将流转换为 byte[]。现在我想读回 byte[] 并将其转换为 BitmapImage,以便我可以将 WPF Image 控件绑定(bind)到它。
我在网上看到很多相互矛盾和令人困惑的代码来完成将 byte[] 转换为 BitmapImage 的任务。由于图像最初是 PNG,我不确定是否需要添加任何代码。
如何将流转换为 BitmapImage?
最佳答案
这应该这样做:
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 会处理它。
关于wpf - 将内存流转换为 BitmapImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346727/