2014-02-10 22 views
0

我有一個打開攝像頭並拍攝條形碼的圖片;這部分工作正常,但我現在想要顯示在屏幕上拍攝的照片。C#WPF使用後刪除圖像

我已經創造了axml文件中的圖像控制如下:

<Image x:Name="BarcodeImage" Margin="5" Height="240" Width="450"/> 

正如你可以看到我已經沒有實際設置的圖像作爲尚沒有任何顯示。

拍完照片後,我將圖像保存到我的硬盤;這工作正常,因爲我可以從我的電腦查看圖像。

我那麼在代碼中設置的相關圖片如下:

this.BarcodeImage.Source = new BitmapImage(new Uri(filename)); 

這正常工作,現在我可以在屏幕上看到所拍攝的圖像。

如果我希望掃描不同的條碼,就會出現我的問題;由於文件名已存在,因此我無法保存下一張照片,所以我試圖在保存下一張圖片之前刪除圖片,但我一直收到錯誤消息「該文件可能正在被另一個進程使用」。

我試過在刪除之前設置了一個默認圖像(希望我想要刪除的圖像現在不被使用),但是現在無法刪除(甚至是手動)這兩個圖像,因爲它們都被使用另一個過程。

我也嘗試將image.source設置爲null,但這也不起作用。

對於如何刪除圖像或清除當前圖像集,您有任何建議嗎?

回答

1

當您直接從文件加載BitmapImage時,文件將被鎖定,直到圖像被釋放。爲了避免這種情況,最簡單的方法是將圖像從流加載,並設置CacheOptionOnLoad

using (var stream = File.OpenRead(filename)) 
{ 
    var bmp = new BitmapImage(); 
    bmp.BeginInit(); 
    bmp.StreamSource = stream; 
    bmp.CacheOption = BitmapCacheOption.OnLoad; 
    bmp.EndInit(); 
    this.BarcodeImage.Source = bmp; 
} 
+1

這也是必要設置'bmp.CacheOption = BitmapCacheOption.OnLoad'調用EndInit和關閉之前流。 – Clemens

+0

@克萊門斯,好點。我編輯了我的答案。 –

+0

我剛剛回應說,用這段代碼它只是顯示一個白色框,但已經看到代碼已被編輯,並且這個額外的代碼行代碼工作正常。謝謝你的幫助。 – Grufty