如何获得图像的分辨率? (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不感兴趣,我只需要1024×768,1200×1024等号码。 另外,每次我想要找到图像的分辨率时,我是否必须创建一个新的图像对象?

我正在创建一个应用程序,列出给定文件夹中的当前图像,所以任何帮助将不胜感激。 🙂

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

 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具有相同宽度(英寸)的像素数。

要获得大小:

 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包含此信息,但是没有遇到过它。

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

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

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

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