2009-08-26 153 views

回答

30

這裏的一些老代碼,我發現應該做的伎倆:

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

這就需要實際打開和測試圖像 - 文件擴展名被忽略。假設你打開文件,這比信任一個文件擴展名要穩健得多。

如果你不打開文件,沒有比字符串比較「更快」(在性能意義上) - 當然不會調用操作系統來獲取文件擴展名映射。

+4

爲什麼你需要行'圖形gInput = Graphics.FromImage(imgInput);'? 'gInput'根本不使用。 – 2014-09-25 08:15:49

+0

也許,他想把所有這些都放在Try-Catch中,看看它是否有效。 – RealityDysfunction 2014-10-08 15:58:49

+0

儘管如此,這對於「另存爲...」場景來說是無用的。 – Nyerguds 2015-02-26 09:55:52

25
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(); 
    } 
} 
+0

如果打開文件不可行,這是更好的選擇。例如,加載非常大的圖像可能會導致「OutOfMemory」異常。這不是很健壯,對許多用例都會這樣做。 – TEK 2016-05-09 15:56:20

5
private static ImageFormat GetImageFormat(string format) 
    { 
     ImageFormat imageFormat = null; 

     try 
     { 
      var imageFormatConverter = new ImageFormatConverter(); 
      imageFormat = (ImageFormat)imageFormatConverter.ConvertFromString(format); 
     } 
     catch (Exception) 
     { 

      throw; 
     } 

     return imageFormat; 
    } 
+0

我不明白爲什麼這是upvoted! imageFormatConverter.ConvertFromString繼承自TypeConverter並始終返回null或引發NotSupportedException! [見此](https://stackoverflow.com/a/3594313/2803565) – 2017-12-10 11:45:09