Bitmap.Height和VerticalResolution之间的区别

时间:2011-06-02 23:04:38

标签: .net image resolution pixels

b #Height和b.Width属性以及C#中的b.Horizo​​ntalResolution和b.VerticalResolution有什么区别?

Bitmap b = new Bitmap(@"foo.bmp");

对于我的样本,高度= 65,宽度= 375,Horizo​​ntalResolution = VerticalResolution = 150.01239 。 MSDN表示高度和宽度以像素为单位,但Horizo​​ntalResolution和VerticalResolution是每英寸像素数。那么,这是否意味着这是从扫描仪扫描此图像的dpi?或者这是别的吗?

问题的背景如下:我想扫描签名并在asp.net页面上显示为表单中的图像。表格是一种标准的政府形式,具有明确的信号空间。我在扫描图像时应该考虑哪些因素,以便在我在浏览器中看到它以及打印网页时显示它没有任何模糊性。

我不明白的是,如果所有图像格式都存储(a)图像的像素大小(高度/宽度),浏览器将在图像标签中显示/调整大小,以及(b)其他一些dpi等效于打印机会用来打印吗?如果不是什么决定了打印纸上的图像尺寸?

2 个答案:

答案 0 :(得分:11)

如果要确保在输出设备上显示的图像与创建时的物理尺寸相同,则每英寸点数属性非常重要。最好的示例是使用Microsoft Paint创建的图像。在您使用它时,您可以使用显示器。其通常具有每英寸96像素的分辨率。因此,960 x 960图像将在显示器上显示为(大致)10 x 10英寸的图像。

现在打印出来。打印机是高分辨率设备,每英寸600点是很正常的。这意味着您的960 x 960像素图像将在纸上打印为960/600 = 1.6 x 1.6英寸的图像。你漂亮的设计变成了一张邮票。

显然,这是不可取的,图像需要重新调整为在纸上看起来与在显示器上看起来相似。图像的每英寸点数属性允许您执行此操作。 Image.Horizo​​ntal / VerticalResolution属性告诉你96,打印机的Graphics.DpiX / Y告诉你600,你知道你必须重新缩放600/96来获得相同大小的图像。

请注意有副作用。由于重新缩放,您在Microsoft Paint中绘制的每个像素都会在纸上变成6 x 6 blob。纸张上的像素非常小,但图像看起来可能相同。只要图像具有平滑过渡,就像照片一样。什么不好用的是文本,特别是抗锯齿类。否则,与为打印机生成的报告相比,屏幕截图看起来更差。

答案 1 :(得分:0)

Vertical / Horizo​​ntalResolution属性告诉您此图像定义为使用的每英寸像素数。所以有一些例子......

100像素×100像素@ 50x50 ppi的图像意味着打印时图像消耗2英寸×2英寸。 (100/50)

使用您的数字:375 x 65 @ 150.01239 = ~2.5 x .43英寸。

平均电脑显示器设置为72 ppi,但不保证这一点。