Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Canvas.ellipse(Trect), résultat bizarre ? [ Archives / Graphique ] (DeltaFX)

dimanche 23 avril 2006 à 18:09:58 | Canvas.ellipse(Trect), résultat bizarre ?

DeltaFX

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 ?



dimanche 23 avril 2006 à 18:51:48 | Re : Canvas.ellipse(Trect), résultat bizarre ?

florenth

Membre Club
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

dimanche 23 avril 2006 à 20:29:27 | Re : Canvas.ellipse(Trect), résultat bizarre ?

DeltaFX

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);

  aCanvas.Ellipse(aRect);
end;


dimanche 23 avril 2006 à 20:38:09 | Re : Canvas.ellipse(Trect), résultat bizarre ?

florenth

Membre Club
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.

++

dimanche 23 avril 2006 à 23:24:42 | Re : Canvas.ellipse(Trect), résultat bizarre ?

DeltaFX

Réponse acceptée !
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.




Cette discussion est classé dans : fonction, pixel, ellipse, canvas, trect


Répondre à ce message

Sujets en rapport avec ce message

Question Noire Et Blanche !!! [ par Nicolas___ ] Bonjour (Soir ...) , Bon voila ma question est peut etre idiote vu que peut etre elle n est pas possible a rep ms enfin ...Comme on dit qui ne tente r De l'aide !!!! svp !!!! [ par zywx ] Voila c'est à cause de mon moteur physik !!! J'aarive pas à obtenir la couleur d'un pixel d'un Trect !!! je fé un bounds(....) et j'obtiens donc un tr Couleur Pixel écran [ par cedricbi ] Bonjour,Je cherche une fonction permettant de récuperer la couleur d'un pixel de l'écran. Il y a la fonction GetPixel mais, elle est trop lente pour c tracer de fonction [ par nraloux ] Salut a tous , j'aimerais tracer des graphes en delphi dans un paintbox mais en utilisant des points tout ce que j'essai de faire dans delphi c'est ca courbe de bézier [ par TouTSpeed ] bonjour j'aimerais que quelqu'un m'aide à résoudre un soucis !voici mon code ( la form7 sert a afficher la courbe ! )procedure TForm1.ButGraphClick(Se Calage imprimante Matricielle [ par couf ] Bonjour à Tous,  Je vois déja les rires de certains qui vont dire mais c'est quoi ce matérielle de Dinausaure.:-DBref il ya quelques temps j'aurais mo Problème d'affichage d'une Image1.Canvas.Pen.Mode [ par cincap ] Bonsoir à toutes et à tous,Je dispose de deux fiche, sur la 1ère (formvisu) je charge une photo dans un Timage et j'ai un Tprintersetupdialog, sur la TImageList, TImage et Transparence [ par JulioDelphi ] Bonsoir, J'ai un soucis de transparence, voila le bazar : Je pose une TImage, je vais peindre dessus grace au .Canvas Je pose un TImageList. Elle co EInvalidPointer à la passe 204 [ par mounjetado ] bonjour,je reviens vers vous aujourd'hui avec un petit souci récurrent tout à fait incompréhensible.en effet, j'ai une erreur EInvalidPointer qui appa aide pour mettre en place une fonction [ par khawarizm ] Bonsoir tout le monde ; est ce qu quelqu'un  peut  m'aider à mettre en place une fonction pour <span style="mso-spacerun: ye


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,37 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.