我找到了这个方法:
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);
Run Code Online (Sandbox Code Playgroud)
但我真的不明白如何获取我正在寻找的东西.我对DPI不感兴趣,我只需要1024x768,1200x1024等数字.另外,每次我想要找到图像的分辨率时,我是否必须创建一个新的图像对象?
我正在创建一个应用程序,列出给定文件夹中的当前图像,所以任何帮助将不胜感激.:)
Rom*_*kov 13
"1024x768"在计算机显示设置的上下文中仅被称为"分辨率",即便如此,这也是一个令人遗憾的误称.在成像中,"1024x768"只是图像的宽度和高度,正如其他人所提到的,您已经显示了检索这些数字的代码.略微调整:
var img = Image.FromFile(@"C:\image.jpg");
Console.WriteLine(img.Width + "x" + img.Height); // prints "1024x768" (etc)
Run Code Online (Sandbox Code Playgroud)
获取你所追求的数字的唯一内置方法是创建一个新实例(事实上,解码整个图像) - 如果你只需要检索几百个这样的数字,这将是非常低效的图片.避免这很难; 这是一个起点:如何在不加载图像的情况下可靠地获取.NET中的图像尺寸?
当您谈到"分辨率"时,通常指的是每英寸的点数或像素数.该Bitmap班将其存储在HorizontalResolution/ VerticalResolution性能,而在图形类DpiX/ DpiY.
这个计算:
bmp.Width * (g.DpiX / bmp.HorizontalResolution)
Run Code Online (Sandbox Code Playgroud)
可以重新排列,以便清楚如下:
(bmp.Width / bmp.HorizontalResolution) * g.DpiX
Run Code Online (Sandbox Code Playgroud)
括号部分以英寸计算图像宽度.g.DpiX然后乘以,可以得到Graphics对象中与图像具有相同宽度(以英寸为单位)的像素数bmp.