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

C++Builder Discussion :

Antigrain et C++ builder [Non suivi]


Sujet :

C++Builder

  1. #1
    Membre habitu�
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 8
    Par d�faut Antigrain et C++ builder
    Finalement je dois me r�soudre a demander de l'aide.

    Je tente de r�aliser des choses tr�s simple avec la librairie graphique Antigrain. Le probl�me c'est que bien que �a compile il ne se passe rien du tout.

    Comment tracer un ligne dans un fenetre (TForm) ou bien un TCanvas ou un TImage en utilisant cette superbe librairie ????

    La moindre info sera la bienvenue

  2. #2
    Membre �prouv�

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par d�faut
    Si c'est pour tracer une ligne je ne vois pas l'int�r�t d'utiliser une libraire vu que le composant TCanvas le fait...superbement bien

    L'exemple ci-dessous trace une ligne du point (1, 1) au point (2, 3)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    MaForm->Canvas->MoveTo(1, 1);
    MaForm->Canvas->LineTo(2, 3);
    Si tu veux faire d'autres choses graphique je te conseille de bien lire l'aide sur le TCanvas.
    En esp�rant t'avoir aid�,

    Bon courage !

  3. #3
    Membre �prouv�
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Par d�faut
    bien d'accord je me demande bien ce que le TCanvas ne peut pas faire ... sauf cas particulier ...

  4. #4
    Membre habitu�
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 8
    Par d�faut Je ne me suis pas bien expliqu�
    J'ai cr�� une tr�s grosse application mais elle fonctionne grace au timage et tcanvas. ceque je veux faire avec la librairie graphique antigrain c'est r��crire tout le code de la partie graphique pour utiliser des fonctions comme l'antialiasing ou bien le remplissage vec des patterns etc etc.

    merci pour les premi�res r�ponses en tout cas

  5. #5
    Membre exp�riment�

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    D�tails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par d�faut
    Il faut dessiner sur un TPaintBox. Les autres composants s'effacent automatiquement puisque leur contenu est stock� dans l'objet avec TPaintBox le dessin est libre et vive le GDI.
    btw Pas mal antigrain je ne connaissais pas.

  6. #6
    Membre �prouv�
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Par d�faut
    Salut,

    t'aurai pas un bout de code pour que je puisse dessiner sur un TCanvas ... ( sur un TPaintBox par exemple ) ... parce que pour le moment j'arrive � cr�er un fichier mais pas moyen de dessiner directement sur le canvas ...

  7. #7
    Membre exp�riment�

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    D�tails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par d�faut
    Ceci desine cela http://www.senosoft.com/tmp/anitgrain.jpg dans une PaintBox (le screenshot est extrait de mon soft: P3dO). Note que j'ai enlev� quelques �l�ments dont l'icone et le GradientFill.
    Avec TCanvas (CBuilder 5) il n'y a pas de GradientFill, ni la fonction DrawText implement�e ici. DrawText est bien plus puissante que TextOut.
    L'icone dans le PaintBox est clickable, tout ceci donne un petit contr�le mais sans les 4 ou 5 TLabel et le TImage qu'il aurait fallut placer.

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    void __fastcall Form1::PaintBox1Paint(TObject *Sender)
    {
      CGDRecord* pGdrec;
      RECT rcDraw;
      int nLeft = 11;                 // Text painting bounds
      int nRight= viewInfo->Width-5;
      int nTextHeight = 13;
     
      if ((m_bmPaintBox1->Empty) ||
          (m_bmPaintBox1->Width!=PaintBox1->Width))
      {
        m_bmPaintBox1->Width = PaintBox1->Width;
        m_bmPaintBox1->Height= PaintBox1->Height;
     
        m_bmPaintBox1->Canvas->Brush->Color = clWindow;
        m_bmPaintBox1->Canvas->FillRect(Rect(0, 0, m_bmPaintBox1->Width, m_bmPaintBox1->Height));
     
    		m_bmPaintBox1->Canvas->Brush->Color = clHighlight;
        m_bmPaintBox1->Canvas->FillRect(Rect(1, 24, m_bmPaintBox1->Width, 24+2));
    	}
     
    	PaintBox1->Canvas->Draw(0, 0, m_bmPaintBox1);
     
    	::SetBkMode(viewInfo->Canvas->Handle, TRANSPARENT);
     
      TCHAR* pszDisplay = new TCHAR[_MAX_PATH];
      AnsiString sDisplay;
     
      // Display current folder name
      viewInfo->Canvas->Brush->Color = clWindow;
      viewInfo->Canvas->Font->Name = "Arial";
      viewInfo->Canvas->Font->Size = 12;
      viewInfo->Canvas->Font->Style = TFontStyles() << fsBold;
      _tcscpy(pszDisplay, m_pszCurrentDir);
      PathStripPath(pszDisplay);
      SetRect(&rcDraw, nLeft, 3, nRight, 3+19);
      ::DrawText(viewInfo->Canvas->Handle, pszDisplay, -1, &rcDraw,
                 DT_SINGLELINE | DT_LEFT | DT_NOPREFIX | DT_END_ELLIPSIS | DT_NOCLIP);
     
      // Display current file infos
      if (GDGetFocused(pGdrec)) {
        viewInfo->Canvas->Font->Name = "Verdana";
        viewInfo->Canvas->Font->Size = 8;
     
        _tcscpy(pszDisplay, pGdrec->m_sFullPath.c_str());
        PathStripPath(pszDisplay);
        SetRect(&rcDraw, nLeft+m_dwShlIconLarge+2, 41, nRight, 41+nTextHeight);
        ::DrawText(viewInfo->Canvas->Handle, pszDisplay, -1, &rcDraw, //(ici) DT_PATH_ELLIPSIS
                   DT_SINGLELINE | DT_LEFT | DT_NOPREFIX | DT_END_ELLIPSIS | DT_NOCLIP);
     
        viewInfo->Canvas->Font->Style = TFontStyles();
        SetRect(&rcDraw, nLeft+m_dwShlIconLarge+2, 54, nRight, 54+nTextHeight);
        ::DrawText(viewInfo->Canvas->Handle, pGdrec->m_sTypeName.c_str(), -1, &rcDraw,
                   DT_SINGLELINE | DT_LEFT | DT_NOPREFIX | DT_END_ELLIPSIS | DT_NOCLIP);
    		...
      }
      delete [] pszDisplay;
    }
    Il suffit de savoir que :
    - TCanvas->Handle == HDC (Device context du GDI de Windows)
    - On ne doit dessiner que quand et l� ou Windows nous y autorise, sinon tout est effac� - en l'occurence ici et en g�n�ral dans le OnPaint du contr�le.
    D�s lors toutes les m�thodes de dessin du GDI s'appliquent.

  8. #8
    Membre �prouv�
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Par d�faut
    Salut,

    En regardant ton exemple je vois que je me suis mal exprim�... ma question portait sur la biblioth�que antigrain ... voici un bout de code exemple que j'aimerai mettre � l'�cran ... pour le moment je cr�� uniquement un fichier ...

    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
     
       unsigned char* buffer = new unsigned    char[FRAMEWIDTH*FRAMEHEIGHT*3];
     
       memset(buffer,255,FRAMEWIDTH*FRAMEHEIGHT*3);
       agg::rendering_buffer rbuf(buffer,FRAMEWIDTH,FRAMEHEIGHT,FRAMEWIDTH*3);
       agg::pixfmt_rgb24 pixf(rbuf);
       agg::rgba8 span[FRAMEWIDTH];
     
       unsigned int i;
       for(i=0;i<FRAMEWIDTH;++i)
       {  agg::rgba c(380.0+400.0*i/FRAMEWIDTH,0.8);
          span[i]=agg::rgba8(c);                    }
     
       for(i=0;i<FRAMEHEIGHT;++i)
          pixf.blend_color_hspan(0,i,FRAMEWIDTH,span,0,255);
     
       FILE* fd = fopen("essai.ppm","wb");
       if(fd)
       {
          fprintf(fd,"P6 %d %d 255 ",FRAMEWIDTH,FRAMEHEIGHT);
          fwrite(buffer,1,FRAMEWIDTH*FRAMEHEIGHT*3,fd);
          fclose(fd);
       }
       delete [] buffer;
    �videmment pour se servir de ce code il faut utiliser la biblioth�que antigrain disponible ici --> http://www.antigrain.com/agg23.zip

  9. #9
    Membre exp�riment�

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    D�tails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par d�faut
    En fait, ton buffer est le buffer d'un bitmap 24 bits. Au lieu de remplir un buffer tu peux tout aussi bien remplir celui d'un TBitmap (ScanLine) que tu pourras ensuite dessiner dans un TPaintBox comme ci-dessus ou un TImage.

    Je n'ai pas CBuilder sur cette machine, mais pour ce faite il faut proc�der comme suit:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    bmBmp = new Gaphics::TBitmap();
    bmBmp->Width = FRAMEWIDTH;
    bmBmp->Height = FRAMEHEIGHT;
    bmBmp->(?) = 24 bits (désolé me rappelle plus nom méthode)
     
    // Scanner par la hauteur
    for(i=0;i<FRAMEHEIGHT;++i) 
      for(j=0;j<FRAMEWIDTH;++i) 
         bmBmp->ScanLine
    Le code est incomplet mais Il faut que tu regarde la propri�t� ScanLine de l'objet Bitmap.
    Comme les bits d'un Bitmap sont align�s en m�moire tu peux racourcir en faisant un memcpy mais il vaut mieux travailler par ScanLine (par la hauteur) pour des raisons d'alignement des lignes entre elles.
    Et pour finir chaque pixel de ton bitmap est compos� de 3 BYTES, c'est � dire de 3 rgba8 dans ton code. Un Rouge, un Vert, un Bleu => 24 bits. Tu le savais peut-�tre mais c'est important pour assigner les ScanLine.

Discussions similaires

  1. Choisir Visual c++ ou Borland C++Builder ?
    Par DevEric dans le forum Choisir un environnement de d�veloppement
    R�ponses: 31
    Dernier message: 14/06/2007, 23h48
  2. Outils, cours et NOUVEAUX tutoriels pour Borland C++Builder
    Par hiko-seijuro dans le forum C++Builder
    R�ponses: 10
    Dernier message: 12/03/2006, 22h33
  3. c++ builder JavaDoc :)
    Par JEG dans le forum C++Builder
    R�ponses: 8
    Dernier message: 08/06/2002, 13h31
  4. Documentation DirectX dans C++Builder 3
    Par srvremi dans le forum DirectX
    R�ponses: 1
    Dernier message: 26/04/2002, 09h59
  5. R�ponses: 2
    Dernier message: 20/03/2002, 23h01

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