2016-03-04 97 views
2

我找不到任何东西,需要一些帮助。我已经将一堆图像作为BitmapImage类型加载到内存中,以便我可以删除它们存储在其中的临时目录。我已成功完成这部分。现在我需要将图像保存到不同的临时位置,我无法弄清楚如何做到这一点的图像包含在:如何将内存中的BitmapImage保存到WPF C#中的文件中?

Dictionary<string, BitmapImage> 

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

+0

你有没有理由不移动文件?如果服务器或程序在写回到磁盘之前崩溃,数据将会丢失。如果您只是使用IO来移动文件,那么(有效)不会有数据丢失的风险。 –

+0

是的,我有一个不同的方法来处理恢复,我打算实施。当用户为我的应用程序加载一个项目文件(一个zip文件)时,它将它全部提取到一个临时目录,将这些文件加载​​到内存中,然后清理该临时目录。程序会定期自动将项目保存在备份文件中。当用户想要保存他们的项目时,我想将所有这些资源在内存中卸载到一个临时目录中,将其作为项目文件压缩,保存到用户位置,然后删除临时目录。我只需要计算如何从内存中保存。 – Chris

+0

你*只*将图像加载到内存中,或者你是否也在UI中显示它们?如果不显示它们,则不需要创建BitmapImages,只需将二进制文件内容存储为字节数组即可。无论如何,将BitmapImage保存到文件由BitmapEncoder完成,例如,一个PngBitmapEncoder。 – Clemens

回答

13

您需要使用编码器来保存图像。 PngBitmapEncoder将处理大多数常见的图像类型(PNG,BMP,TIFF等)。以下将采取图像并保存:

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对象的实例中调用它。

+0

谢谢!这个解决方案非常优雅,像魅力一样工作! – Chris

相关问题