2009-12-02 141 views
1

我使用WPF在Stackoverflow: How do I load images in the background?如何使用WPF在后台加载不同的图像,PNG,GIF和JPG?

问题加载使用的答案BackgroundImage是URL字符串可能是PNG,GIF或JPG,我需要为使用JpegBitmapDecoderPngBitmapDecoderGifBitmapDecoder。如果没有使用正确的解码器,则发生FileFormatException

我可以在字符串上使用扩展名,但如果用户有一个.png扩展名的GIF图像,仍然可能会出现错误。

任何想法,我会如何解决这个问题?

回答

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") 

因此,第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"