Как загрузить различные изображения, PNG, GIF и JPG в фоновом режиме, используя WPF? - PullRequest
1 голос
/ 02 декабря 2009

Я использую WPF для загрузки Image в Background, используя ответ на Stackoverflow: Как загрузить изображения в фоновом режиме?

Проблема в том, что строка URL может иметь формат PNG, GIF или JPG, и мне нужно использовать JpegBitmapDecoder, PngBitmapDecoder или GifBitmapDecoder. Если правильный декодер не используется, то происходит FileFormatException.

Я мог бы использовать расширение для строки, но ошибки все равно могут возникать, если у пользователя есть изображение GIF с расширением .png.

Есть идеи, как мне решить эту проблему?

1 Ответ

1 голос
/ 02 декабря 2009

Вы можете двоично прочитать начальную часть самого файла и сравнить ее с различными спецификациями файла.

Я получил это от простой проверки некоторых файлов JPG без чтения спецификаций, и это всего лишь элементарный шаблон сопоставления, поэтому его нельзя доверять, а просто как пример (в реальных приложениях не следует читать весь поток конечно):

let IsJpg (url:string) =
    let req = WebRequest.Create(url)
    let rsp = req.GetResponse()
    use stream = rsp.GetResponseStream()
    use reader = new StreamReader(stream)       
    let GetResult = reader.ReadToEnd()
    GetResult.Contains("JFIF")

Итак, первые 2 приведут к истине, а третьи к ложному:

IsJpg "http://www.flatpackrevolution.com/wp-content/uploads/2007/10/pow.jpg" 
IsJpg   "http://bedzine.com/blog/wp-content/uploads/2008/04/4-17-stack-drawers-1-1.jpg"
IsJpg "http://sstatic.net/so/img/logo.png" 
...