【问题标题】:How do I save a BitmapImage from memory into a file in WPF C#?如何将 BitmapImage 从内存中保存到 WPF C# 中的文件中?
【发布时间】:2016-06-18 16:18:40
【问题描述】:

我在这方面找不到任何东西,需要一些帮助。我已经将一堆图像作为 BitmapImage 类型加载到内存中,这样我就可以删除它们存储的临时目录。我已经成功完成了这部分。现在我需要将图像保存到不同的临时位置,但我不知道如何执行此操作图像包含在:

Dictionary<string, BitmapImage>

字符串是文件名。如何将此集合保存到新的临时位置?感谢您的帮助!

【问题讨论】:

  • 您不只是移动文件有什么原因吗?如果服务器或您的程序在您将它们写回磁盘之前崩溃,则数据将丢失。如果您只是使用 IO 来移动文件,则(实际上)没有数据丢失的风险。
  • 是的,我有一种不同的方法来处理我打算实施的恢复。当用户为我的应用程序加载一个项目文件(一个 zip 文件)时,它会将其全部提取到一个临时目录,将文件加载到内存中,然后清理该临时目录。然后,该程序将定期将项目自动保存在备份文件中。当用户想要保存他们的项目时,我想将内存中的所有这些资源卸载到临时目录中,将其压缩为项目文件,将其保存到用户位置,然后删除临时目录。我只需要弄清楚如何从内存中保存。
  • 您是仅将图像加载到内存中,还是在 UI 中也显示它们?如果您不显示它们,则无需创建 BitmapImages,您可以简单地将二进制文件内容存储为字节数组。无论如何,将 BitmapImage 保存到文件是由 BitmapEncoder 完成的,例如一个 PngBitmapEncoder。
  • 我会研究一下。是的,我在 UI 中显示图像。

标签: c# wpf save bitmapimage


【解决方案1】:

您需要使用编码器来保存图像。以下将获取图像并保存:

BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(image));

using (var fileStream = new System.IO.FileStream(filePath, System.IO.FileMode.Create))
{
    encoder.Save(fileStream);
}

我通常会将其写入扩展方法,因为它是图像处理/操作应用程序的一个非常常见的功能,例如:

public static void Save(this BitmapImage image, string filePath)
{
    BitmapEncoder encoder = new PngBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(image));

    using (var fileStream = new System.IO.FileStream(filePath, System.IO.FileMode.Create))
    {
        encoder.Save(fileStream);
    }
}

这样您就可以从 BitmapImage 对象的实例中调用它。

【讨论】:

  • 谢谢!这个解决方案非常优雅,而且效果很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 2015-09-06
  • 1970-01-01
相关资源
最近更新 更多