我在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。
答案 0 :(得分:1)
您可以尝试从FileStream创建BitmapFrame。请注意,必须设置BitmapCacheOption.OnLoad
才能在Create调用后立即关闭流。
using (var stream = File.OpenRead(Path))
{
Image = BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}