例如,C#表示所选图像包含96 ppi,而Photoshop中的相同图像包含72 ppi。
为什么会有区别?
在这种情况下,我倾向于相信Photoshop,以及如果C#返回错误结果,如何测试图像分辨率?
我们需要构建某种验证器控件,使用ppi!= 300拒绝所有图像。
控件应支持以下格式:jpg,jpeg,gif,png,bmp。
代码如下:
Image i = Image.FromFile(FileName);
Console.Write(i.VerticalResolution);
Console.Write(i.HorizontalResolution);
答案 0 :(得分:7)
DPI表示每英寸点(像素)。基于当前显示器的大小和分辨率,以英寸为单位的物理尺寸是主观的。除非你依赖于元数据(gif和bmp不包含),否则你无法可靠地计算出来。
Photoshop只有DPI的规定值,它在翻译图像进行打印时使用。此值存储在PSD文件中,可以复制到JPEG元数据,但如果以不带DPI元数据的格式保存图像,则不会存储该信息。
<强>更新强>
您的代码获取不同值的原因是C#从计算机上的当前DPI设置中获取其VerticalResolution
和HorizontalResolution
值。 Photoshop的DPI用于打印,因此如果要将图像发送到打印机,它会知道物理尺寸。它的默认值为72dpi,但您可以更改此值。但是,该值在屏幕上没有意义,因为屏幕仅以像素为单位。
答案 1 :(得分:1)
DPI表示每英寸点数。位图图像没有固有的DPI,它只有一个大小,即水平像素数和垂直像素数(宽度和高度)。当您说出要挤入每英寸的像素数时,图像只能获得分辨率(以DPI为单位)。
因此,如果我的图像宽100像素,高100像素(100像素×100像素),如果我打印它(或将其转换为指示打印尺寸的格式),它将是100 DPI,这样它就适合完全在一平方英寸(1“×1”)。如果我打印它以适合2英寸乘2英寸的正方形,它将是50 DPI,&amp; c。