是否有快速方法将ImageFormat对象与特定文件扩展名相关联?我正在寻找比每种格式更快的字符串比较。
答案 0 :(得分:32)
以下是我发现的一些旧代码:#/ p>
string InputSource = "mypic.png";
System.Drawing.Image imgInput = System.Drawing.Image.FromFile(InputSource);
Graphics gInput = Graphics.fromimage(imgInput);
Imaging.ImageFormat thisFormat = imgInput.RawFormat;
这需要实际打开并测试图像 - 忽略文件扩展名。假设您正在打开文件,这比信任文件扩展名要强大得多。
如果你没有打开文件,那么没有什么比在字符串比较中“更快”(在性能意义上) - 当然不会调用操作系统来获取文件扩展名映射。
答案 1 :(得分:28)
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();
}
}
答案 2 :(得分:4)
private static ImageFormat GetImageFormat(string format)
{
ImageFormat imageFormat = null;
try
{
var imageFormatConverter = new ImageFormatConverter();
imageFormat = (ImageFormat)imageFormatConverter.ConvertFromString(format);
}
catch (Exception)
{
throw;
}
return imageFormat;
}
答案 3 :(得分:1)
请参阅CodeProject文章关于文件关联http://www.codeproject.com/KB/dotnet/System_File_Association.aspx