我发现在 WPF 中获取图像元数据的常用方法是创建一个 BitmapFrame 对象并检查其上的 Metadata 属性。但是我似乎无法创建满足这两个要求的 BitmapFrame 对象:
- 不锁定文件
- 在给定某些文件时不会抛出奇怪的、未记录的异常
使用这些行似乎可以可靠地创建 BitmapImage:
BitmapFrame.Create(new Uri(imageName));
BitmapFrame.Create(new Uri(imageName), BitmapCreateOptions.DelayCreation, BitmapCacheOption.None);
然而,他们将文件锁定了一段不确定的时间。据我所知,BitmapFrame 上没有 dispose 方法。
这样可以防止文件被锁定:
BitmapFrame.Create(new Uri(imageName), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
但是在 Vista 上,它会在某些文件上抛出 ArgumentException 和 InvalidOperationException,在 Win7 上它会抛出 FileFormatException 和 IOExceptions。这让我觉得缓存 BitmapFrame 不受支持/未经测试。
您能否从 WPF 中的图像中获取元数据,而无需在不确定的时间长度内锁定文件?
请您参考如下方法:
您是否尝试过使用转换器方法?比如我的Intuipic应用程序执行此操作。参见 BitmapFrameConverter有关不锁定加载的详细信息,以及 BitmapOrientationConverter获取元数据。
