Как получить размер изображения из имени файла

У меня есть файл с именем FPN = "c:\ggs\ggs Access\images\members\1.jpg"

Я пытаюсь получить размер изображения 1.jpg, и я хотел бы проверить, действительно ли размер изображения действителен или нет до загрузки, и если ширина или высота изображения меньше или равна нулю, появится сообщение типа "изображение не в правильном формате"

Кто-нибудь может мне помочь?

Ответ 1

System.Drawing.Image img = System.Drawing.Image.FromFile(@"c:\ggs\ggs Access\images\members\1.jpg");
MessageBox.Show("Width: " + img.Width + ", Height: " + img.Height);

Ответ 2

Wpf класс System.Windows.Media.Imaging.BitmapDecoder не читает весь файл, только метаданные.

using(var imageStream = File.OpenRead("file"))
{
    var decoder = BitmapDecoder.Create(imageStream, BitmapCreateOptions.IgnoreColorProfile,
        BitmapCacheOption.Default);
    var height = decoder.Frames[0].PixelHeight;
    var width = decoder.Frames[0].PixelWidth;
}

Обновление 2019-07-07

Если я правильно помню, через несколько месяцев я обнаружил, что работать с изображениями exif'ом немного сложнее. По некоторым причинам iphone сохраняет повернутое изображение вместо обычного и устанавливает флаг "повернуть это изображение перед отображением".
Также оказалось, что GIF довольно сложный формат. Вполне возможно, что ни один кадр не имеет полного размера GIF, вы должны агрегировать его из смещений и размеров кадров.

Поэтому я использовал ImageProcessor вместо этого, который справился со всеми проблемами для меня. Никогда не проверял, читает ли он весь файл, хотя в некоторых браузерах нет поддержки exif, и мне все равно пришлось сохранять повернутую версию.

using (var imageFactory = new ImageFactory())
{
    imageFactory
        .Load(stream)
        .AutoRotate(); //takes care of ex-if
    var height = imageFactory.Image.Height,
    var width = imageFactory.Image.Width
}