2009-08-26 14 views

Respuesta

30

Aquí hay un código de edad descubrí que debe hacer el truco:

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

Esto requiere abrir y probar la imagen en realidad - se ignora la extensión del archivo . Suponiendo que está abriendo el archivo de todos modos, esto es mucho más sólido que confiar en una extensión de archivo.

Si no está abriendo los archivos, no hay nada "más rápido" (en un sentido de rendimiento) que una comparación de cadenas; ciertamente no llama al sistema operativo para obtener asignaciones de extensiones de archivos.

+4

¿Por qué necesita la línea 'Gráficos gInput = Graphics.FromImage (imgInput);'? 'gInput' no se usa en absoluto. –

+0

Tal vez, quería poner todo esto en un Try-Catch y ver si funciona. – RealityDysfunction

+0

Esto es bastante inútil para un escenario de "guardar como ...". – 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

Esta es la mejor opción si no es posible abrir el archivo. Por ejemplo, cargar una imagen muy grande puede causar una excepción 'OutOfMemory'. Esto no es tan robusto, servirá para muchos casos de uso. – 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

¡No entiendo por qué esto está subido de categoría! imageFormatConverter.ConvertFromString se hereda de TypeConverter y siempre devuelve null o arroja una excepción NotSupportedException! [ver esto] (https://stackoverflow.com/a/3594313/2803565) –

Cuestiones relacionadas