如何使用WPF在后台加载不同的图像,PNG,GIF和JPG?

时间:2009-12-02 14:33:02

标签: .net wpf image background

我正在使用WPF在Image中使用Stackoverflow: How do I load images in the background?的答案加载Background

问题是网址字符串可能是PNG,GIF或JPG,我需要使用JpegBitmapDecoderPngBitmapDecoderGifBitmapDecoder。如果未使用正确的解码器,则会发生FileFormatException

我可以在字符串上使用扩展名,但如果用户的GIF图片扩展名为.png,则仍可能出现错误。

我有什么想法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以二进制读取文件本身的开头部分,并将其与各种文件规范进行比较。

我只是检查了一些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")

所以前两个将产生真,第三个假:

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"