我有一个打开网络摄像头拍摄条形码的照片;这部分工作正常但我现在想要显示在屏幕上拍摄的照片。
我在axml文件中创建了图像控件,如下所示:
<Image x:Name="BarcodeImage" Margin="5" Height="240" Width="450"/>
正如你所看到的,我还没有实际设置图像,因为没有任何东西可以显示。
拍完照片后,我将图像保存到硬盘中;这可以正常工作,因为我可以从我的电脑上查看图像。
然后我按照以下方式在代码中设置图像:
this.BarcodeImage.Source = new BitmapImage(new Uri(filename));
这是正常的,我现在可以在屏幕上看到拍摄的图像。
如果我想扫描不同的条形码,我的问题就出现了;我无法保存下一张照片,因为文件名已经存在,所以我试图在保存下一张图片之前删除图片,但我不断收到错误消息“该文件可能正被另一个进程使用”。
我尝试过删除之前设置的默认图像(希望现在没有使用我要删除的图像),但现在两个图像都无法删除(甚至手动),因为它们都被另一个使用过程
我也尝试将image.source设置为null,但这也不起作用。
您对我如何删除图像或清除当前图像集有什么建议吗?
答案 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;
}