2010-08-16 206 views
1

我試圖打印大小爲2x2英寸的圖像。根據分辨率創建一個轉換函數(英寸到像素)。但是,結果遠不是2x2英寸,印刷產生的圖像幾乎不適合整張紙!我做錯了什麼?PrintDocument_PrintPage&Graphics.DrawImage大小以英寸爲單位

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 

回答

3

是的,這不是正確的做法。 Graphics.Dpix將返回打印機的分辨率,通常爲每英寸600點。但是你畫的是獨立的分辨率。因此,當用戶選擇具有300 dpi分辨率的其他打印機時,您無需執行任何特殊操作。重要的是因爲否則你的文件將是兩倍大,不再適合紙張。

獨立於分辨率的映射由Graphics.PageUnit決定。默認值是Display,使一個像素爲0.01英寸。換句話說,要獲得2×2英寸的打印輸出,您只需使用200 x 200的矩形。如果您真的想要,可以更改PageUnit,英寸是其中一個設置。然後你會使用一個2×2的矩形。您當然必須使用帶有PointF和RectangleF的Graphics方法重載,整數版本將無法正常工作。

默認(顯示)很方便,因爲它使您在屏幕上繪製的圖形大小與您在打印機上繪製的大小相同。因爲顯示器的通用分辨率爲96 dpi,足夠接近1像素== 0.01「。允許您重新使用代碼將繪製到屏幕的內容吸引到打印機以及

+0

*通用分辨率爲顯示器是96 dpi * >>注意,這確實是* common *,但許多人(尤其是視力問題)已將此設置爲120 dpi或更高,並且Mac(不是.NET可能的候選人,但仍然是Silverlight在Mac上運行)默認情況下使用72 dpi,並且*「相同大小」*僅爲相對值,屏幕上的像素大小差別很大PS:+1正確答案! – Abel 2010-08-16 11:31:21

相關問題