2009-08-26 3 views

Répondre

30

Voici un vieux code que je trouve que devrait faire l'affaire:

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

Cela nécessite réellement ouvrir et tester l'image - l'extension de fichier est ignoré . En supposant que vous ouvrez le fichier de toute façon, c'est beaucoup plus robuste que de faire confiance à une extension de fichier.

Si vous n'ouvrez pas les fichiers, il n'y a rien de plus "rapide" (dans le sens des performances) qu'une comparaison de chaîne - ne pas appeler le système d'exploitation pour obtenir des mappages d'extension de fichier.

+4

Pourquoi avez-vous besoin de la ligne 'Graphics gInput = Graphics.FromImage (imgInput);'? 'gInput' n'est pas utilisé du tout. –

+0

Peut-être, il voulait mettre tout cela dans un Try-Catch et voir si cela fonctionne. – RealityDysfunction

+0

Ceci est plutôt inutile pour un scénario "enregistrer sous ...", cependant. – 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

C'est la meilleure option si l'ouverture du fichier n'est pas possible. Par exemple, le chargement d'une très grande image peut entraîner une exception 'OutOfMemory'. Ce n'est pas aussi robuste, fera pour de nombreux cas d'utilisation. – 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

Je ne comprends pas pourquoi c'est upvoted! imageFormatConverter.ConvertFromString est hérité de TypeConverter et renvoie toujours null ou déclenche une exception NotSupportedException! [voir ceci] (https://stackoverflow.com/a/3594313/2803565) –

Questions connexes