C#WPF使用后删除图像

时间:2014-02-10 13:10:42

标签: c# wpf image

我有一个打开网络摄像头拍摄条形码的照片;这部分工作正常但我现在想要显示在屏幕上拍摄的照片。

我在axml文件中创建了图像控件,如下所示:

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

正如你所看到的,我还没有实际设置图像,因为没有任何东西可以显示。

拍完照片后,我将图像保存到硬盘中;这可以正常工作,因为我可以从我的电脑上查看图像。

然后我按照以下方式在代码中设置图像:

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

这是正常的,我现在可以在屏幕上看到拍摄的图像。

如果我想扫描不同的条形码,我的问题就出现了;我无法保存下一张照片,因为文件名已经存在,所以我试图在保存下一张图片之前删除图片,但我不断收到错误消息“该文件可能正被另一个进程使用”。

我尝试过删除之前设置的默认图像(希望现在没有使用我要删除的图像),但现在两个图像都无法删除(甚至手动),因为它们都被另一个使用过程

我也尝试将image.source设置为null,但这也不起作用。

您对我如何删除图像或清除当前图像集有什么建议吗?

1 个答案:

答案 0 :(得分:1)

直接从文件加载BitmapImage时,文件将被锁定,直到图像被释放。为避免这种情况,最简单的方法是从流中加载图像,并将CacheOption设置为OnLoad

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;
}