2010-08-16 13 views
1

J'essaye d'imprimer une image classée 2x2 pouces. Créé une fonction de conversion (pouces en pixels) basée sur la résolution. Cependant, le résultat est loin de 2x2 pouces, l'impression produit une image qui correspond à peine à toute la feuille! Est-ce que je fais quelque chose de mal?PrintDocument_PrintPage & Graphics.DrawImage Taille en pouces

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 

Répondre

3

Oui, ce n'est pas la bonne façon de le faire. Graphics.Dpix retournera la résolution de l'imprimante, généralement 600 points par pouce. Mais ce que vous dessinez est indépendant de la résolution. Ainsi, vous n'avez rien de spécial à faire lorsque l'utilisateur sélectionne une autre imprimante avec, disons, une résolution de 300 dpi. Important car sinon votre document serait deux fois plus grand et ne correspondrait plus au papier.

Le mappage indépendant de la résolution est déterminé par Graphics.PageUnit. La valeur par défaut est Affichage qui fait un pixel 0,01 pouces. En d'autres termes, pour obtenir une impression de 2 x 2 pouces, il suffit d'utiliser un rectangle de 200 x 200. Vous pouvez changer le PageUnit si vous voulez vraiment, Inches est l'un des paramètres. Vous utiliseriez alors un rectangle 2x2. Vous devez bien sûr utiliser les surcharges de la méthode graphique qui prennent un PointF et un RectangleF, les versions entières ne fonctionneront pas bien.

La valeur par défaut (Affichage) est pratique car elle rend le dessin de l'écran similaire à celui que vous dessinez sur l'imprimante. Parce qu'une résolution courante pour l'affichage est de 96 dpi, assez proche de 1 pix == 0.01 ".Permet de réutiliser le code qui dessine des choses à l'écran pour dessiner à l'imprimante aussi

+0

* une résolution commune pour l'affichage est de 96 dpi * >> notez que c'est en effet * commun *, mais que beaucoup de gens (surtout avec des problèmes visuels) ont fixé ce paramètre à 120 dpi ou plus et que le Mac (pas un candidat probable pour .NET peut-être, mais encore, Silverlight fonctionne sur Mac) utilise 72 dpi par défaut.En outre, * "même taille" * est relatif seulement, les tailles de pixels sur les écrans varient largement PS: +1 bonne réponse! – Abel