wpf - 将内存流转换为 BitmapImage?

标签 wpf

我有一个最初是 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/

相关文章:

c# - 是否可以更改 Extended WPF Toolkit 的 Busyindicator 中的忙碌动画?

wpf - 如何将图标放入按钮中 (MahApps)

c# - 程序不包含适合入口点的静态 'main' 方法

c# - 我可以在 XAML(.NET 4 Framework 之前)中指定泛型类型吗?

c# - MVVM 将 View 绑定(bind)到 TabControlItems - View 不显示

c# - 从方法返回更新

c# - 无法使用 PRISM 5、MVVM 和 EF 6 在 WPF 中刷新 DataGrid

c# - 在 WPF 中重新加载绑定(bind)到 Datagrid 的 DataTable

c# - 如何以编程方式设置附加属性?

c# - 如何检测隐藏的桌面?