2009-08-26 19 views

Odpowiedz

30

Oto niektóre stary kod znalazłem, że powinno załatwić sprawę:

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

Wymaga to rzeczywiście otwarcie i testowanie obrazu - rozszerzenie pliku jest ignorowana . Zakładając, że i tak otwierasz plik, jest to o wiele bardziej niezawodne niż zaufanie do rozszerzenia pliku.

Jeśli nie otwierasz plików, nie ma nic "szybszego" (w sensie wydajności) niż porównanie ciągów - z pewnością nie wywołanie w systemie operacyjnym, aby uzyskać mapowania rozszerzeń plików.

+4

Dlaczego musisz linię 'Graphics gInput = Graphics.FromImage (imgInput);'? 'gInput' nie jest w ogóle używany. –

+0

Może, chciał umieścić to wszystko w Try-Catch i sprawdzić, czy to działa. – RealityDysfunction

+0

To raczej bezużyteczny scenariusz "zapisz jako ...". – Nyerguds

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

Jest to lepsza opcja, jeśli otwarcie pliku nie jest możliwe. Na przykład ładowanie bardzo dużego obrazu może spowodować wyjątek "OutOfMemory". To nie jest tak solidne, zrobi dla wielu przypadków użycia. – TEK

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

Nie rozumiem, dlaczego jest to przegłosowane! imageFormatConverter.ConvertFromString jest dziedziczony z TypeConverter i zawsze zwraca wartość null lub generuje wyjątek NotSupportedException! [zobacz tę] (https://stackoverflow.com/a/3594313/2803565) –