2011-04-06 8 views
4

J'utilise le code suivant pour tracer une ligne:Comment rendre le drawLine plus lisse?

Graphics g = this.CreateGraphics(); 
Pen p = new Pen(Color.Black,3); 
g.DrawLine(p,...); 
// ... 

Pourquoi la ligne droite est un peu en zigzag, pas droit et lisse du tout. Comment pourrais-je le rendre plus droit et plus lisse?

+0

* Zig-zag *? Cela me fait penser que vous ne parlez pas simplement de quelque chose qu'un peu d'anti-aliasing peut corriger. Pouvez-vous poster une capture d'écran? –

Répondre

8

En utilisant Control.CreateGraphics() ne va pas dans 99,9% des cas. Tout ce que vous dessinez ne peut pas persister. Il sera parti quand vous minimisez et restaurez la fenêtre. Ou lorsque vous le déplacez partiellement de l'écran et vice versa. Ou lorsque vous chevauchez une autre fenêtre sur la vôtre sur XP et toute machine sur laquelle Aero n'est pas activé. CreateGraphics() est uniquement adapté aux animations à des fréquences d'images supérieures à ~ 20 fps. Substituez la méthode OnPaint() de votre formulaire ou implémentez l'événement Paint d'un contrôle.

Utilisez l'objet e.Graphics transmis pour dessiner. Résout ce problème aussi, il sera correctement initialisé pour dessiner des lignes anti-aliasées. Et peut être double-tamponné afin qu'il ne scintille pas. Appelez Invalidate() pour forcer un repeindre.

+0

Oui! C'est la raison pour laquelle je ne vois aucune de mes répliques. J'ajoute un autre gestionnaire d'événements à Paint. J'ai essayé de passer le e.Graphics mais cela donne une erreur "paramètre invalide". – spspli

+0

Encore un? Passer à quoi? –

+0

@spspli: Vous ne transmettez pas 'e.Graphics' * à * n'importe quoi. Vous appelez simplement sa fonction 'DrawLine':' e.Graphics.DrawLine (p, ...) ' –

Questions connexes