2016-03-04 79 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

相關問題