如何获得图像的分辨率? (JPEG,GIF,PNG,JPG)

时间:2010-02-05 12:40:10

标签: c# .net image c#-3.0

我找到了这个方法:

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等数字。另外,每次我想要找到图像的分辨率时,我是否必须创建一个新的图像对象?

我正在制作一个应用程序,列出给定文件夹中的当前图像,因此任何帮助都将受到赞赏。 :)

3 个答案:

答案 0 :(得分:13)

“1024x768”在计算机显示设置的上下文中仅称为“分辨率”,即便如此,这也是一个令人遗憾的误称。在成像“1024x768”中只是宽度&图像的高度,正如其他人所提到的,您已经显示了检索这些数字的代码。略微调整:

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

获取你所追求的数字的唯一内置方法是创建一个新实例(事实上,解码整个图像) - 如果你只需要检索这些数字,这将是非常低效的几百张图片。避免这很难;这是一个起点:How do I reliably get an image dimensions in .NET without loading the image?


当您谈到“分辨率”时,通常会引用dots, or pixels, per inch的数字。 Bitmap类将此存储在HorizontalResolution / VerticalResolution属性中,而DpiX / DpiY中的Graphics类存储。

此计算:

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

可以重新排列,以便清楚如下:

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

其中括号部分以英寸为单位计算图像的宽度。乘以g.DpiX,然后会为您提供Graphics对象中与图像bmp具有相同宽度(以英寸为单位)的像素数。

答案 1 :(得分:3)

获得尺寸:

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

如果需要显示其他人,则为full list of System.Drawing.Image properties

我不确定整个目录是否有更快的方法,在Windows Vista / 7中可能有一个包含此信息的新API,但是没有遇到过它。

答案 2 :(得分:3)

当然,你已经回答了自己的问题,就像这样简单:

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

DPI信息仅在显示或打印图像时才有用。在示例代码中,它将图像转换为Graphics对象,可用于将其绘制到屏幕上。

要回答问题的第二部分,您可以解析JPEG文件标题以查找宽度/高度信息,而无需在图像中实际加载。但要做到这一点,您需要知道JPEG文件的标题信息和文件格式。