【发布时间】:2010-11-23 04:35:33
【问题描述】:
有没有快速的方法来获取关联到特定文件扩展名的 ImageFormat 对象?我正在寻找比每种格式的字符串比较更快的方法。
【问题讨论】:
有没有快速的方法来获取关联到特定文件扩展名的 ImageFormat 对象?我正在寻找比每种格式的字符串比较更快的方法。
【问题讨论】:
这是我发现的一些旧代码,应该可以解决问题:
var inputSource = "mypic.png";
var imgInput = System.Drawing.Image.FromFile(inputSource);
var thisFormat = imgInput.RawFormat;
这需要实际打开和测试图像——文件扩展名被忽略。假设您仍然要打开文件,这比信任文件扩展名要可靠得多。
如果您不打开文件,没有什么比字符串比较“更快”(在性能方面)了——当然不会调用操作系统来获取文件扩展名映射。
【讨论】:
Graphics gInput = Graphics.FromImage(imgInput);这一行? gInput 根本没有使用。
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();
}
}
【讨论】:
OutOfMemory 异常。这不是那么健壮,适用于许多用例。
private static ImageFormat GetImageFormat(string format)
{
ImageFormat imageFormat = null;
try
{
var imageFormatConverter = new ImageFormatConverter();
imageFormat = (ImageFormat)imageFormatConverter.ConvertFromString(format);
}
catch (Exception)
{
throw;
}
return imageFormat;
}
【讨论】:
请参阅 CodeProject 关于文件关联的文章 http://www.codeproject.com/KB/dotnet/System_File_Association.aspx
【讨论】: