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

时间:2019-04-06 13:24:05

标签: c# wpf 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“源”时,#F025字符已替换为“%25EF%2580%25A5”。创建函数将引发“找不到文件”异常。

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

TIA。

1 个答案:

答案 0 :(得分:1)

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

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