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);
}
我在 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);
}