2011-06-22 4 views
3

J'essaie d'imprimer mon formulaire en utilisant GDI, mais quand je l'imprime, la qualité de l'impression n'est pas très bonne (ne pas savoir si Image obtient un alias?), la taille de la forme est 700x700, il y a aussi un paramètre force compris -raster op code-, voici le code ... am utilisecomment améliorer la qualité de l'impression lorsque j'imprime Win Form en C#

private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) 
    { 
     Graphics g1 = this.CreateGraphics(); 
     System.Drawing.Image MyImage = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height, g1); 
     Graphics g2 = Graphics.FromImage(MyImage); 
     IntPtr dc1 = g1.GetHdc(); 
     IntPtr dc2 = g2.GetHdc(); 
     BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376); 
     g1.ReleaseHdc(dc1); 
     g2.ReleaseHdc(dc2); 
     Bitmap bmp = new Bitmap(MyImage); 

     int x = e.MarginBounds.X; 
     int y = e.MarginBounds.Y; 
     int width = bmp.Width; 
     int height = bmp.Height; 
     if ((width/e.MarginBounds.Width) > (height/e.MarginBounds.Height)) 
     { 
      width = e.MarginBounds.Width; 
      height = bmp.Height * e.MarginBounds.Width/bmp.Width; 
     } 
     else 
     { 
      height = e.MarginBounds.Height; 
      width = bmp.Width * e.MarginBounds.Height/bmp.Height; 
     } 
     System.Drawing.Rectangle destRect = new System.Drawing.Rectangle(x, y, width, height); 
     e.Graphics.DrawImage(bmp, destRect, 0, 0, bmp.Width, bmp.Height, System.Drawing.GraphicsUnit.Pixel); 
    } 
+0

Faites également 700 x 700 pixels sur papier. Il sera tranchant mais malheureusement vous aurez besoin d'une loupe pour le voir. Ne pas imprimer les formulaires. –

+0

@Hans Passant: cela rend mon problème encore pire .. :(.. alors je dois imprimer un fichier PDF à partir de mon code sans aucun lecteur PDF installé sur la machine ... Est-ce possible en C# ..? –

Répondre

0

Il est normal que le résultat sera mise à l'échelle et aliasé. La source a trop peu de pixels par rapport à la résolution d'une imprimante moderne. Envisagez d'utiliser WPF, qui utilise un rendu vectoriel, il n'y a donc pas de perte/distorsion lors de la mise à l'échelle. Cheers

1

Peut-être avez-vous un problème avec l'image originale. Donnez-moi un lien vers une image. Vérifiez la taille de l'image.

Essayez insérer la ligne g2.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

Bonne chance!

+0

j'ai essayé aussi ... le formulaire contient 2 boîtes à images, si je charge des images à la boîte d'image alors l'autre étiquette et le texte devient une sorte de flou, sinon c'est assez bon –

Questions connexes