我使用 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);

当我试图删除图像时,我收到一个异常,说“进程无法访问文件‘文件路径/文件名’,因为它正被另一个进程使用。”。我想在删除图像之前处理位图源。当我在寻找解决方案时,我得到了类似的信息
“您不必 Dispose() 位图源。与框架中的其他一些“图像”类不同,它不包装任何 native 资源。

只要让它超出范围,垃圾收集器就会释放它的内存。”在下面的链接Proper way to dispose a BitmapSource中。我只想删除物理文件夹中存在的文件。是否有适当的删除物理路径的方法。
提前致谢。

最佳答案

您可以按照建议的最佳答案 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);

我试过这个,它对我有用

关于c# - 如何处理位图源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18546712/

10-12 05:50