我正在使用WPF在Image
中使用Stackoverflow: How do I load images in the background?的答案加载Background
问题是网址字符串可能是PNG,GIF或JPG,我需要使用JpegBitmapDecoder
,PngBitmapDecoder
或GifBitmapDecoder
。如果未使用正确的解码器,则会发生FileFormatException
。
我可以在字符串上使用扩展名,但如果用户的GIF图片扩展名为.png,则仍可能出现错误。
我有什么想法来解决这个问题?
答案 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"