BitmapFrame.Create 因 Uri 中的转义字符而失败

BitmapFrame.Create fails with escaped characters in Uri

我在 VS2017 中使用 WPF/C#。 我的代码将图像文件的路径作为字符串并尝试将其加载到 BitmapFrame 中,这在大多数情况下都运行良好,除了有人使用 Mac 中的一些图像文件对其进行了测试并且它抛出了异常。原来文件名中包含字符#F025,在Windows中只是显示为一个粗点。

文件为照片,以照片标题命名。这个里面有一个问号,但以 #F025 结尾。

无论如何,代码将字符串转换为 Uri,然后使用 BitmapFrame,如下所示:

    public new void Init()
    {
        Source = new Uri(Path);
        fi = new FileInfo(Path);
        BitmapImage bs;
        try
        {
            Image = BitmapFrame.Create(Source);
            Metadata = new ExifMetadata(Image);
        }
        catch (Exception e)
        {
            Error = e.Message;
            IsBroken = true;
        }

当我在调试器中查看 Uri "Source" 时,#F025 字符已替换为“%25EF%2580%25A5”。 Create 函数抛出 "File Not Found" 异常。

是否有任何方法可以将其转换为 Create 函数将接受的 Uri,或者可能只是使用字符串 Path 来加载它?我确实尝试过使用带有文件名的流,但这也没有用。

TIA。

您可以尝试从 FileStream 创建 BitmapFrame。请注意,必须设置 BitmapCacheOption.OnLoad 才能在创建调用后立即关闭流。

using (var stream = File.OpenRead(Path))
{
    Image = BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}