我找到了这个方法:
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等数字。另外,每次我想要找到图像的分辨率时,我是否必须创建一个新的图像对象?
我正在制作一个应用程序,列出给定文件夹中的当前图像,因此任何帮助都将受到赞赏。 :)
答案 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文件的标题信息和文件格式。