Bitmap.Height和VerticalResolution之间的区别

Rag*_*dda 6 .net resolution image pixels

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

Bitmap b = new Bitmap(@"foo.bmp");
Run Code Online (Sandbox Code Playgroud)

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

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

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

Han*_*ant 12

如果要确保在输出设备上显示的图像与创建时的物理尺寸相同,则每英寸点数属性非常重要.最好的示例是使用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.纸张上的像素非常小,但图像看起来可能相同.只要图像具有平滑过渡,就像照片一样.什么不好用的是文本,特别是抗锯齿类.否则,与为打印机生成的报告相比,屏幕截图看起来更差.


Sam*_*Axe 0

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

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

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

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