我正在尝试打印尺寸为2x2英寸的图像。根据分辨率创建转换函数(英寸到像素)。但是,结果远不是2x2英寸,打印产生的图像几乎不适合整张纸!我做错了吗?
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim graph = e.Graphics
e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
e.Graphics.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
Dim photo = Image.FromFile("C:\Users\Public\Pictures\Sample Pictures\Koala.jpg")
graph.DrawImage(photo, New RectangleF(0, 0, InchToPx(graph.DpiX, 2), InchToPx(graph.DpiY, 2)))
End Sub
Private Function InchToPx(ByVal dpi As Single, ByVal inches As Single) As Single
Return (inches * dpi)
End Function
答案 0 :(得分:3)
是的,这不是正确的方法。 Graphics.Dpix将返回打印机的分辨率,通常为每英寸600点。但你画的是独立于分辨率的。因此,当用户选择具有300 dpi分辨率的另一台打印机时,您不必执行任何特殊操作。重要的是,否则您的文档将会大两倍,不再适合纸张。
独立于分辨率的映射由Graphics.PageUnit确定。默认为显示,使一个像素为0.01英寸。换句话说,要获得2 x 2英寸的打印输出,您只需使用200 x 200的矩形。如果您真的想要,可以更改PageUnit,Inches是其中一个设置。然后,您将使用2x2矩形。您当然必须使用带有PointF和RectangleF的Graphics方法重载,整数版本将无法正常工作。
默认(显示)很方便,因为它使您在屏幕上绘制的内容与您在打印机上绘制的内容大小相同。因为显示器的常见分辨率为96 dpi,足够接近1 pix == 0.01“。允许您重复使用将绘制内容的代码绘制到屏幕上。