6

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 等价物打印?如果不是,是什么决定了打印纸上的图像尺寸?

4

2 回答 2

13

当您要确保在输出设备上显示的图像具有与创建时相同的物理尺寸时,每英寸点数属性很重要。最好的示例是您使用 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 的斑点。纸上的像素非常小,因此图像看起来可能相同。只要图像具有平滑的过渡,就像照片一样。不能很好地工作的是文本,尤其是抗锯齿的那种。这就是为什么屏幕截图看起来比为打印机生成的报告差得多的原因。

于 2011-06-02T23:36:31.910 回答
0

Vertical/Horizo​​ntalResolution 属性告诉您该图像定义为每英寸使用多少像素。所以这里有一些例子..

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

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

平均计算机显示器设置为 72 ppi,但这并不能保证。

于 2011-06-02T23:11:03.797 回答