¿Hay forma rápida de obtener el objeto ImageFormat asociado a una determinada extensión de archivo? Estoy buscando comparaciones de cadenas más rápidas para cada formato.Obtener ImageFormat desde la extensión de archivo
Respuesta
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.
ver el artículo CodeProject de Asociaciones de archivos http://www.codeproject.com/KB/dotnet/System_File_Association.aspx
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();
}
}
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
private static ImageFormat GetImageFormat(string format)
{
ImageFormat imageFormat = null;
try
{
var imageFormatConverter = new ImageFormatConverter();
imageFormat = (ImageFormat)imageFormatConverter.ConvertFromString(format);
}
catch (Exception)
{
throw;
}
return imageFormat;
}
¡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) –
- 1. Obtener ImageFormat desde System.Drawing.Image.RawFormat
- 2. Obtener icono grande desde la extensión de archivo
- 3. Obtener nombre de archivo y extensión desde una ruta absoluta
- 4. Carrierwave cómo obtener la extensión de archivo
- 5. Tipo de archivo - Obtener la extensión original
- 6. Node.js obtener extensión de archivo
- 7. obtener extensión de archivo (editar)
- 8. Obtener el nombre de archivo y la extensión desde el archivo de ruta programáticamente cacao?
- 9. Obtener extensión del archivo sin proporcionar extensión en la ruta
- 10. Obtener la extensión del archivo (nombre base?)
- 11. Cómo obtener un nombre de archivo sin extensión desde la ruta del archivo en Ruby
- 12. Obtener la versión del navegador desde la extensión de Firefox
- 13. ¿Cómo obtener la extensión de archivo del tipo de contenido?
- 14. Obtener nombre de archivo antes de la extensión
- 15. ¿Cómo obtener la extensión de archivo de OpenFileDialog?
- 16. ¿Cómo obtener la extensión de archivo de una url?
- 17. Cómo obtener la extensión del tipo de archivo desde el byte [] (Blob)
- 18. ¿Obtener contenido de archivo desde la URL?
- 19. Obtener la extensión de un archivo contenido en un NSString
- 20. ¿Cómo obtener la extensión de archivo en PHP?
- 21. REGEX: nombre de archivo de captura desde la URL sin la extensión de archivo
- 22. Obtener nombre del archivo sin la extensión en Python
- 23. ¿Cómo obtener la extensión de archivo del archivo como resultado de la consulta SQL?
- 24. Obteniendo la extensión de archivo en C
- 25. obtener el archivo JAR desde
- 26. Cambiando la extensión de archivo en Python
- 27. ¿Cómo obtener el ID de mi extensión desde JavaScript?
- 28. Cómo determinar la extensión de archivo de un archivo desde un uri
- 29. Intellij - ¿Cómo cambio la extensión de archivo de un archivo desde el IDE?
- 30. Agregar extensión de archivo a archivo de extensión-menos
¿Por qué necesita la línea 'Gráficos gInput = Graphics.FromImage (imgInput);'? 'gInput' no se usa en absoluto. –
Tal vez, quería poner todo esto en un Try-Catch y ver si funciona. – RealityDysfunction
Esto es bastante inútil para un escenario de "guardar como ...". – Nyerguds