2010-10-30 6 views
0

J'ai un aperçu avant impression qui affiche un panneau capturé sur un formulaire 'Panel1.DrawToBitmap (memoryImage, bounds);'Winforms Aperçu avant impression Flou

Je sauve aussi l'image sur mon disque dur - « memoryImage.Save (« diary.png ») »

L'image dans l'aperçu avant impression à tout niveau de zoom est floue, l'image enregistrée est parfait (Visionné dans Windows photo spectateur & PS).

Id comme l'aperçu avant impression pour être aussi bon que l'image enregistrée, des idées?

est ici le code: -

private void CaptureScreen() 
    { 
     int x = splitContainerDiary.Location.X; 
     int y = splitContainerDiary.Location.Y; 

     int SCwidth = splitContainerDiary.Panel1.Width; 
     int SCheight = splitContainerDiary.Panel1.Height; 

     Rectangle bounds = new Rectangle(x, y, SCwidth, SCheight); 

     memoryImage = new Bitmap(SCwidth, SCheight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
     splitContainerDiary.Panel1.DrawToBitmap(memoryImage, bounds); 
     memoryImage.Save("diary.png"); 
    } 

    private void printDocumentDiary_PrintPage(object sender, PrintPageEventArgs e) 
    { 
     CaptureScreen(); 
     Font HeaderFont = new Font("Consolas", 16, FontStyle.Bold); 
     e.Graphics.DrawString(selectedYear.ToString() + " - " + name, HeaderFont, Brushes.Black, 15, 15); 
     e.Graphics.DrawImage(Image.FromFile("diary.png"), 5, 5); 
    // e.Graphics.DrawImage(memoryImage, 0, 40); 
     PrintDoodle(e); 
    } 

J'ai essayé de dessiner l'image de la mémoire (e.Graphics.DrawImage (MemoryImage, 0, 40) et aussi de l'image enregistrée « e.Graphics.DrawImage (Image.FromFile (« diary.png »), 5, 5), » Ils sont à la fois floue en aperçu avant impression

J'ai essayé différents formats de pixels sans joie soit

J'ai essayé sauver la.. image comme BMP, JPG, PNG sans joie non plus (lors du dessin d'image fromFile)

J'ai essayé d'utiliser la routine BitBlt avec les mêmes résultats.

Tino

Répondre

0

Ceci est une conséquence inévitable de la différence dramatique entre la résolution du périphérique d'une imprimante vs un moniteur. Une imprimante peut généralement imprimer avec une résolution de 600 points par pouce. Un moniteur est généralement réglé sur 96 DPI. Ainsi, lorsque vous imprimez une image très nette sur un moniteur, chaque pixel de l'image nécessite l'impression d'un blob de 6 x 6. Bref, tout ce qui est dessiné sur l'écran avec anti-aliasing obtiendra ces pixels anti-aliasing dessiné 6 fois plus grand aussi bien. Complètement ruiner l'effet. Cela est particulièrement visible avec tout texte dessiné avec l'anti-aliasing ClearType. Les franges rouges et bleues deviennent très visibles sur le papier.

Vous pouvez résoudre partiellement ce problème en dessinant l'image en tête-à-tête sur l'imprimante, en veillant à ce que 1 pixel dans l'image devienne 1 pixel sur le papier. Cela devrait maintenant être beau et net (moins le problème ClearType) mais vous regarderez un timbre-poste. Faire pousser vos bras six fois plus longtemps aurait le même effet.

Eh bien, cela ne fonctionne pas bien. Utilisez la classe PrintDocument pour pouvoir dessiner des éléments sur l'imprimante en utilisant sa résolution native. Utilisez les méthodes fournies par e.Graphics dans le gestionnaire d'événements PrintPage. Évitez les images sauf si elles sont des photos, tout ce qui n'a pas de dessin au trait finement détaillé évoluera bien.

+0

Hans merci pour votre réponse, pas ce que j'espérais mais je comprends le point maintenant. J'imprime un journal datagidview de 12 mois, chaque mois avec une cellule pour chaque jour, donc ça va prendre un peu de travail pour utiliser les méthodes de dessin e.graphics :-(Donc, je pense que je vais rester avec le flou pour le moment. Tino –

0

J'ai rencontré un problème de "police floue" similaire, tout en essayant d'imprimer du texte personnalisé, que j'ai pré-arrangé comme étiquettes dans le TableLayoutPanel. Ma solution pour le flou était la suivante: J'ai créé un panneau et des étiquettes quatre fois plus grand que la taille finale désirée (en utilisant la police 44 au lieu de 11, et en utilisant la largeur et la hauteur quatre fois plus grandes).

J'ai créé un (grand) bitmap et régionalisés dans l'étape finale (DrawImage):

using (var bmp = new Bitmap(tableLayout.Width, tableLayout.Height)) 
{ 
    tableLayout.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height)); 
    printPageEventArgs.Graphics.DrawImage(
     bmp, 
     printPageEventArgs.MarginBounds.X, 
     printPageEventArgs.MarginBounds.Y, 
     bmp.Width/4, 
     bmp.Height/4); 
} 

Le texte qui en résulte semble beaucoup plus marquée à la fois dans l'aperçu et dans la page imprimée réelle.

Bien sûr, une telle approche ne peut fonctionner que si vous pouvez manipuler la taille du contrôle, par exemple en le créant "hors écran". Mais cela ne fonctionnera pas si vous souhaitez que le contrôle affiché soit imprimé.

Questions connexes