1

我正在尝试打印尺寸为 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
4

1 回答 1

3

是的,这不是正确的做法。Graphics.Dpix 将返回打印机的分辨率,通常为每英寸 600 点。但是您绘制的内容与分辨率无关。因此,当用户选择另一台分辨率为 300 dpi 的打印机时,您不必做任何特别的事情。重要的是,否则您的文档将是原来的两倍,并且不再适合纸张。

与分辨率无关的映射由 Graphics.PageUnit 确定。默认值是 Display,它使一个像素为 0.01 英寸。换句话说,要获得 2 x 2 英寸的打印输出,您只需使用 200 x 200 的矩形。如果您真的需要,您可以更改 PageUnit,英寸是设置之一。然后,您将使用 2x2 矩形。您当然必须使用采用 PointF 和 RectangleF 的 Graphics 方法重载,整数版本无法正常工作。

默认(显示)很方便,因为它使您在屏幕上绘制的内容与您在打印机上绘制的大小大致相同。因为显示器的常见分辨率是 96 dpi,足够接近 1 pix == 0.01"。允许您重新使用将内容绘制到屏幕上的代码也可以绘制到打印机。

于 2010-08-16T11:01:18.967 回答