【问题标题】:How do I load different images, PNG, GIF and JPG in the background using WPF?如何使用 WPF 在后台加载不同的图像、PNG、GIF 和 JPG?
【发布时间】:2011-09-01 00:57:54
【问题描述】:
我正在使用 WPF 在Background 中使用Stackoverflow: How do I load images in the background? 的答案加载Image
问题是 URL 字符串可能是 PNG、GIF 或 JPG,我需要使用 JpegBitmapDecoder、PngBitmapDecoder 或 GifBitmapDecoder。如果未使用正确的解码器,则会出现FileFormatException。
我可以在字符串上使用扩展名,但如果用户有一个带有 .png 扩展名的 GIF 图像,仍然可能会出现错误。
有什么想法可以解决这个问题吗?
【问题讨论】:
标签:
.net
wpf
image
background
【解决方案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"