IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Dessin de cercle sans crénelage [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Jlmat
    Homme Profil pro
    Ex Informaticien et Consultant en Ressources Humaines, Retraité
    Inscrit en
    Avril 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ex Informaticien et Consultant en Ressources Humaines, Retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 364
    Par défaut Dessin de cercle sans crénelage
    Bonjour,

    J'utilise la bibliothèque de BRGABitmapPack.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.FormPaint(Sender: TObject);
      var ImgPos   : TPoint;
            bmp       : TBGRABitmap;
    begin
      ImgPos := Point( (ClientWidth - 100) div 2 ,(ClientHeight - 100) div 2); 
      Dessine_Point(ImgPos.X,ImgPos.Y,50,2,Form1.Canvas,ClRed,ClSkyBlue);
      //affiche la BGRABitmap sur la fenêtre
      bmp.Draw(Canvas, 0, 0, True);
      //libère la mémoire
      bmp.Free;
    end;
    Le point Obtenu est le suivant:
    Nom : Aide1.jpg
Affichages : 286
Taille : 11,9 Ko
    Le dessin du point qui est un cercle coloré est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    {-Dessine_Point ----------------------------------------------------------------
      Dessine Un point aux coordonnées spécifiées (Ox,Oy), de rayon R
    -------------------------------------------------------------------------------}
    procedure TForm1.Dessine_Point(Ox,Oy,R,e : integer; aCanvas : TCanvas;aColorExt,aColorInt: Tcolor);
      var  CircRect : TRect; // coordonnées figure circonscrite
    begin
      CircRect := Rect(Ox - R , OY - R, OX + R, OY + R);
      With aCanvas do
      begin
        // Couleur de fond
        Brush.Color := aColorInt;
        Brush.Style := bsSolid;
        Pen.Color   := aColorExt;
        Pen.Style   := psSolid;
        Pen.Width   := e;
        Ellipse(CircRect);
      end;
    end;

    Je n'arrive pas à supprimer le crénelage du cercle et utiliser la propriété Antialias du canvas de BGRABitmap.
    Pouvez-vous m'éclairer?

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 117
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 117
    Par défaut
    Bonsoir,

    Citation Envoyé par Jlmat Voir le message
    Je n'arrive pas à supprimer le crénelage du cercle et utiliser la propriété Antialias du canvas de BGRABitmap.
    Pouvez-vous m'éclairer?
    Réponse rapide : c'est normal, ce n'est pas possible à cause de la fabrication de l'écran, qui est plein de petits carrés côte à côte de gauche à droite et de haut en bas.

    Et pour "avoir l'impression" d'un cercle parfait, il faut bidouiller, regarde :
    Nom : cercle.png
Affichages : 242
Taille : 2,3 Ko

    Il est beau, hein, ce cercle, mais si je l'agrandis, on voit le subterfuge :
    Nom : cercle_bien_zoomé.png
Affichages : 249
Taille : 4,5 Ko

    il y a plein de flou et notre cerveau fait le reste.

    Maintenant, pourquoi n'y a-t-il pas ces carrés flous sur l'image que tu nous montres ? Je ne sais pas, je ne connais quasiment pas les composants BGRA mais je ne doute pas que d'autres vont te trouver une solution, donc un peu de patience…

  3. #3
    Membre éclairé
    Avatar de Jlmat
    Homme Profil pro
    Ex Informaticien et Consultant en Ressources Humaines, Retraité
    Inscrit en
    Avril 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ex Informaticien et Consultant en Ressources Humaines, Retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 364
    Par défaut
    J'ai publié avant de voir ta réponse jpété, merci, je rajoute donc cette ligne...
    Apparemment, j'obtiens une meilleure résolution avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Procedure TForm1.DessineCercle;
      var
        image, texture : TBGRABitmap;
        c : TBGRAPixel;
        x,y,rx,ry: integer;
        imgPos  : TPoint;
      begin
          ImgPos := Point( (ClientWidth - 100) div 2 ,(ClientHeight - 100) div 2);
          image := TBGRABitmap.Create(ImgPos.X,ImgPos.Y,ColorToBGRA(ColorToRGB(clYellow)));
          c := ColorToBGRA(ColorToRGB(clRed));
          //coordonnées de l'ellipse
          x := 300;
          y := 300;
          rx := 50;
          ry := 50;
     
          //charge un pinceau pour la texture. On reprend bsSolid comme auparavant 
          texture := image.CreateBrushTexture(bsCross,BGRAWhite,blSkyBlue) as TBGRABitmap;
     
          image.FillEllipseAntialias(x,y,rx-1,ry-1,texture);
          image.EllipseAntialias(x,y,rx,ry,c,1); //draw outline
     
          tex.Free;
          image.Draw(Canvas,x,y,True);
          image.free;
      end;
    Nom : Aide3.jpg
Affichages : 230
Taille : 22,7 Ko

    J'obtiens avec ce code l'image 2. Comparée à l'image obtenue en 1, elle est un peu mieux...
    Mais je ne suis pas entièrement satisfait. Ne pourrait-on pas améliorer la résolution?

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 117
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 117
    Par défaut
    Citation Envoyé par Jlmat Voir le message
    J'obtiens avec ce code l'image 2. Comparée à l'image obtenue en 1, elle est un peu mieux...
    Mais je ne suis pas entièrement satisfait. Ne pourrait-on pas améliorer la résolution?
    Ben dis donc tu es difficile ! Pour moi l'image de droite est parfaite et je ne crois pas qu'on puisse améliorer quoi que ce soit.

    Ou alors tu as un écran avec des gros pixels ? Quand je regarde des spéc's, je me dis que les fabricants gèrent ça d'une manière curieuse : j'ai déjà vu des écrans dont la dalle a la même taille que le mien en cm mais dont le nombre de lignes est moindre, tout comme le nombre de points par ligne. Fatalement les pixels y sont plus gros, donc la finesse fiche le camp.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. demande d'aide pour dessiner un cercle
    Par nadjib2007 dans le forum C++Builder
    Réponses: 3
    Dernier message: 06/09/2007, 20h09
  2. Réponses: 10
    Dernier message: 11/04/2007, 11h14
  3. Dessiner un cercle sur une sphère ?
    Par nico_ippo dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/01/2007, 17h25
  4. Réponses: 2
    Dernier message: 13/10/2004, 14h52
  5. Dessiner un cercle
    Par delire8 dans le forum DirectX
    Réponses: 7
    Dernier message: 26/07/2003, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo