Get ImageFormat from File Extension

Here's some old code I found that should do the trick:

 var inputSource = "mypic.png";
 var imgInput = System.Drawing.Image.FromFile(inputSource);
 var thisFormat = imgInput.RawFormat;

This requires actually opening and testing the image--the file extension is ignored. Assuming you are opening the file anyway, this is much more robust than trusting a file extension.

If you aren't opening the files, there's nothing "quicker" (in a performance sense) than a string comparison--certainly not calling into the OS to get file extension mappings.


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();
    }
}

Tags:

C#

.Net

Image