从文件扩展名中获取ImageFormat

有没有快速的方法来获取与特定文件扩展名关联的ImageFormat对象? 我正在寻找比每种格式更快的字符串比较。

这是我发现的一些旧代码应该做的诀窍:

string InputSource = "mypic.png"; System.Drawing.Image imgInput = System.Drawing.Image.FromFile(InputSource); Graphics gInput = Graphics.fromimage(imgInput); Imaging.ImageFormat thisFormat = imgInput.RawFormat; 

这需要实际打开和测试图像 – 忽略文件扩展名。 假设您正在打开文件,这比信任文件扩展名要强大得多。

如果你没有打开文件,那么没有什么比在字符串比较中“更快”(在性能意义上) – 当然不会调用操作系统来获取文件扩展名映射。

 private static ImageFormat GetImageFormat(string fileName) { string extension = Path.GetExtension(fileName); if (string.IsNullOrEmpty(extension)) throw new ArgumentException( string.Format("Unable to determine file extension for fileName: {0}", fileName)); switch (extension.ToLower()) { case @".bmp": return ImageFormat.Bmp; case @".gif": return ImageFormat.Gif; case @".ico": return ImageFormat.Icon; case @".jpg": case @".jpeg": return ImageFormat.Jpeg; case @".png": return ImageFormat.Png; case @".tif": case @".tiff": return ImageFormat.Tiff; case @".wmf": return ImageFormat.Wmf; default: throw new NotImplementedException(); } } 
  private static ImageFormat GetImageFormat(string format) { ImageFormat imageFormat = null; try { var imageFormatConverter = new ImageFormatConverter(); imageFormat = (ImageFormat)imageFormatConverter.ConvertFromString(format); } catch (Exception) { throw; } return imageFormat; } 

请参阅有关文件关联的CodeProject文章http://www.codeproject.com/KB/dotnet/System_File_Association.aspx