从文件扩展名中获取ImageFormat

时间:2009-08-26 21:58:52

标签: c# .net image

是否有快速方法将ImageFormat对象与特定文件扩展名相关联?我正在寻找比每种格式更快的字符串比较。

4 个答案:

答案 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