Как я могу получить разрешение изображения? (JPEG, GIF, PNG, JPG)

Я нашел этот метод:

Graphics g = e.Graphics;
Bitmap bmp = new Bitmap("winter.jpg");
g.DrawImage(bmp, 0, 0);
Console.WriteLine("Screen resolution: " + g.DpiX + "DPI");
Console.WriteLine("Image resolution: " + bmp.HorizontalResolution + "DPI");
Console.WriteLine("Image Width: " + bmp.Width);
Console.WriteLine("Image Height: " + bmp.Height);

SizeF s = new SizeF(bmp.Width * (g.DpiX / bmp.HorizontalResolution),
                    bmp.Height * (g.DpiY / bmp.VerticalResolution));

Console.WriteLine("Display size of image: " + s);

Но я действительно не понимаю, как выбрать то, что я ищу. Я не интересуюсь DPI, мне просто нужно 1024x768, 1200x1024 и т.д. числа. Кроме того, я должен был бы создать новый объект изображения каждый раз, когда я хочу найти разрешение изображения?

Я подаю заявку, которая перечисляет текущие изображения в данной папке, таким образом, любая справка ценилась бы.:)

6
задан 5 February 2010 в 12:40
поделиться

3 ответа

«1024x768» называется «разрешением» только в контексте настроек дисплея компьютера, и даже в этом случае это неправильное название. В изображении «1024x768» - это просто ширина и высота изображения, поэтому, как уже упоминали другие, вы уже показали код, который извлекает эти числа. Слегка изменено:

var img = Image.FromFile(@"C:\image.jpg");
Console.WriteLine(img.Width + "x" + img.Height); // prints "1024x768" (etc)

Единственный встроенный метод для получения чисел, которые вам нужны, - это создание нового экземпляра (и, фактически, декодирование всего изображения), что будет крайне неэффективно, если вам нужно получить только эти цифры для нескольких сотен изображений. Избежать этого сложно; вот отправная точка: Как мне надежно получить размеры изображения в .NET без загрузки изображения?


Когда вы говорите о «разрешении», вы обычно имеете в виду количество точек или пикселей на дюйм . Класс Bitmap сохраняет это в свойствах HorizontalResolution / VerticalResolution , а класс Graphics - в DpiX / DpiY .

Это вычисление:

bmp.Width * (g.DpiX / bmp.HorizontalResolution)

можно изменить для ясности следующим образом:

(bmp.Width / bmp.HorizontalResolution) * g.DpiX

где часть в квадратных скобках вычисляет ширину изображения в дюймах. Умножение на g.DpiX затем дает вам количество пикселей в объекте Graphics , которые имеют ту же ширину в дюймах, что и изображение bmp .

13
ответ дан 8 December 2019 в 12:20
поделиться

Для получения размера:

string path = @"C:\winter.jpg";
Image img = Image.FromFile(path);
Console.WriteLine("Image Width: " + img.Width); //equals img.Size.Width
Console.WriteLine("Image Height: " + img.Height); //equals img.Size.Height

Вот полный список свойств System.Drawing.Image, если необходимо, чтобы в регистре отображались другие.

Я не уверен, что есть более быстрый способ для всей директории, в Windows Vista/7 может быть более новый API, который содержит эту информацию, однако, не наткнулся на нее.

3
ответ дан 8 December 2019 в 12:20
поделиться

Конечно, вы ответили на свой вопрос, все просто:

Bitmap bmp = new Bitmap(@"winter.bmp");     
Console.WriteLine("Image Width: " + bmp.Width);
Console.WriteLine("Image Height: " + bmp.Height);

Информация о DPI действительно полезна только при отображении или печати изображения. В примере кода это преобразование изображения в объект Graphics, который можно использовать для вывода изображения на экран.

Чтобы ответить на 2-ю часть вопроса, можно разобрать заголовок JPEG-файла, чтобы найти информацию о ширине/высоте без фактической загрузки изображения. Но для этого Вам необходимо знать информацию о заголовке и формате файла для файлов JPEG.

3
ответ дан 8 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: