Сбой BitmapFrame.Create с экранированными символами в Uri - PullRequest
0 голосов
/ 06 апреля 2019

Я использую WPF / C # в VS2017.Мой код берет путь к файлу изображения в виде строки и пытается загрузить его в 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, который будет принимать функция Create, или, возможно, просто использовать строку Path для его загрузки вместо этого?Я попытался использовать поток с именем файла, но это тоже не сработало.

TIA.

1 Ответ

1 голос
/ 06 апреля 2019

Вы можете попытаться создать BitmapFrame из FileStream. Обратите внимание, что BitmapCacheOption.OnLoad должен быть установлен, чтобы иметь возможность закрыть поток сразу после вызова Create.

using (var stream = File.OpenRead(Path))
{
    Image = BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...