DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 2009
-
23 avril 2006 à 18:09
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 2009
-
23 avril 2006 à 23:24
Vala mon problème du jour :
j'ai un Trect, une form et son canvas, et l'envie de dessiner un cercle. Donc pouf, mon trect, j'en fais un carré, et dans le onPaint de ma form, zou :
With myform do
begin
Canvas.Pen.Width:=1;
Canvas.Ellipse(MyRect)
end;
Et hop. D'apres la doc de delphi, blahblah la fonction ellipse dessine l'ellipse inscrite dans le rectangle, etc etc.... Ouais, ca c'est avec un Pen.width de 1. Des que j'essaye autre chose, blam dans le mur la fonction ellipse, un coup sur deux elle commence 1 pixel trop tot en top/left et déborde aussi en bottom/right.
A croire que la fonction est pas foutue de prendre en compte l'épaisseur du trait.
Ca se corrige un truc comme ca ? (Oui je suis maniac, en plus je m'amuse a faire une capture d'écran pour verifier que mon ellipse est bien symétrique, au pixel pres).
Y a pas moyen de tracer un cercle à partir des coords du pixel du centre, et un rayon ?
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 23 avril 2006 à 23:24
Bon ben apres tests, c'est toute la fonction de dessin d'ellipse qui me semble foireuse. Je m'explique, une ellispe, meme dans un espace discret (des pixels cote a cote) c'est symetrique, or dans le cas ou l'on donne un Trect qui est carré, ca plante, elle est pas symetrique.
Alors c'est peut-etre pas important, d'ailleurs Paintshoppro7 a cette tendance aussi, mais pour moi, un cercle c'est un cercle, et un cercle en pixel il doit se superposer a lui-meme (pixel a pixel) à chaque quart de tour.
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 23 avril 2006 à 18:51
Salut,
Mauricio avait reconnu ce problème il y a quelque temps et avait fourni sa solution au problème.
Regardes donc ici : Utilisation de Canvas.Rectangle()
Il avait fait cela pour dessiner un rectangle avec un Pen.Width > 1 mais je pense que tu peux assez facilement modifier sa procédrue pour l'adapter au dessin de cercles.
++
Si tu ne te plantes pas ......
tu ne pousseras jamais
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 23 avril 2006 à 20:29
Merci ;)
Adapté :
procedure DrawInnerEllipse(aCanvas: TCanvas; aRect: TRect);
begin
if aCanvas.Pen.Width > 1 then
aRect := RECT(aRect.Left + aCanvas.Pen.Width div 2,
aRect.Top + aCanvas.Pen.Width div 2,
aRect.Right +1 -(aCanvas.Pen.Width-1) div 2,
aRect.Bottom +1 -(aCanvas.Pen.Width-1) div 2);
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 23 avril 2006 à 20:38
C'est bien d'avoir posté la réponse pour ceux qui passeront peut être après toi.
Mais alors valide-là, histoire que l'on sache que ton problème est résolu.