如何处理位图源

本文关键字:位图 处理 何处理 | 更新日期: 2023-09-27 18:29:47

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

当我试图删除图像时,遇到一个异常,说"进程无法访问文件‘filepath/filename’,因为另一个进程正在使用它。"。我想在删除图像之前处理位图源。当我搜索解决方案时,我得到了如下信息"您不必Dispose()BitmapSource。与框架中的其他一些"image"类不同,它不包装任何本地资源。

只要让它超出范围,垃圾收集器就会释放它的内存。"在下面的链接中处理BitmapSource的正确方法。我只想删除物理文件夹中存在的文件。有什么正确的方法可以删除物理路径吗?"。提前谢谢。

如何处理位图源

您可以按照这里的顶部建议答案,首先将文件复制到流中,并从流中初始化位图源,例如

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

我已经尝试过了,它对我有效