c# - example - system.drawing dll
Obtener ImageFormat de la extensión de archivo (4)
¿Hay una forma rápida de obtener el objeto ImageFormat asociado a una extensión de archivo en particular? Estoy buscando comparaciones de cadenas más rápidas para cada formato.
Aquí hay un código antiguo que encontré que debería 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 realmente abrir y probar la imagen: la extensión del archivo se ignora. 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 se llama al sistema operativo para obtener asignaciones de extensión de archivo.
consulte el artículo de CodeProject sobre 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();
}
}
private static ImageFormat GetImageFormat(string format)
{
ImageFormat imageFormat = null;
try
{
var imageFormatConverter = new ImageFormatConverter();
imageFormat = (ImageFormat)imageFormatConverter.ConvertFromString(format);
}
catch (Exception)
{
throw;
}
return imageFormat;
}