Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BitmapFrame.Create失败,Uri中有转义字符_C#_Wpf_Uri - Fatal编程技术网

C# BitmapFrame.Create失败,Uri中有转义字符

C# BitmapFrame.Create失败,Uri中有转义字符,c#,wpf,uri,C#,Wpf,Uri,我正在VS2017中使用WPF/C。 我的代码以字符串形式获取图像文件的路径,并尝试将其加载到BitmapFrame中,这在大多数情况下运行良好,但有人使用Mac上的一些图像文件对其进行了测试,结果引发了异常。结果表明,文件名包含字符#F025,在Windows中,该字符仅显示为一个厚点 这些文件是照片,以照片标题命名。这一个有一个问号,但最后是#F025 无论如何,代码将字符串转换为Uri,然后使用BitmapFrame,如下所示: public new void Init()

我正在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函数抛出一个“未找到文件”异常

如果有任何方法可以将其转换为Create函数将接受的Uri,或者仅仅使用字符串路径来加载它?我确实尝试过使用文件名为的流,但也不起作用


TIA。

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

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

非常感谢,这真是一种享受。我不得不在其他几个地方更换,但现在一切都很好。