2013-08-31 64 views
3

我正在使用BitmapSource類從我的臨時文件夾中讀取圖像,然後使用BitmapMetadata類讀取元數據。如何處置位圖源

BitmapSource img = BitmapFrame.Create(new Uri(filepath)); 
BitmapMetadata meta = (BitmapMetadata)img.Metadata; 
DateTime datetaken = DateTime.Parse(meta.DateTaken); 
System.IO.File.Delete(filepath); 

當我試圖刪除的圖像正在一個異常說:「該進程無法訪問文件‘文件路徑/文件名’,因爲它正被另一個進程使用。」我想之前處置了的BitmapSource的刪除圖像。當我正在尋找解決方案時,我得到了如下信息: 「您不必Dispose()BitmapSource。與框架中的某些其他」圖像「類不同,它不包含任何本機資源。超出範圍,垃圾收集器將釋放它的內存。「在下面的鏈接Proper way to dispose a BitmapSource。我只是想刪除物理文件夾中存在的文件。有沒有適當的方法來刪除物理路徑。 在此先感謝。

+0

你可能想在這裏看看,這可能會有幫助http://stackoverflow.com/questions/542217/load-a-bitmapsource並保存使用同名的wpf-ioexception特別是第三個答案 – ameer

+0

** @ ameer **該鏈接中的第三個答案是'image.CacheOption = BitmapCacheOption.OnLoad;',不是它?但是BitmapSource沒有名爲CacheOption的屬性。請問我是否有錯,請建議。 – shivasai

回答

1

你可以做頂部建議的答案here,然後將文件複製到流中,並初始化流中的位圖源。

 MemoryStream memoryStream = new MemoryStream(); 

     byte[] fileBytes = File.ReadAllBytes(filepath); 
     memoryStream.Write(fileBytes, 0, fileBytes.Length); 
     memoryStream.Position = 0; 

     BitmapSource img = BitmapFrame.Create(memoryStream); 
     BitmapMetadata meta = (BitmapMetadata)img.Metadata; 
     DateTime datetaken = DateTime.Parse(meta.DateTaken); 
     System.IO.File.Delete(filepath); 

我已經試過這和它的作品對我來說

+1

謝謝**阿梅爾**,它對我來說工作得很好。 – shivasai