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 :

Save JPG from TChart : Bug de Lazarus ?


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Ingénieur d'Etude
    Inscrit en
    Août 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur d'Etude

    Informations forums :
    Inscription : Août 2002
    Messages : 32
    Par défaut Save JPG from TChart : Bug de Lazarus ?
    Bonjour
    J'espère être au bon endroit pour poster.

    Donc voilà , j'au un TChart contenant 2 TSeries.
    Dessus je dois tracer un graphique. Les contraintes de ce graphique sont incompatibles avec le fonctionnement de toutes les TSeries existantes.
    Donc j'utilise le Canvas du Tchart (pas de problème pour moi).

    A l'écran tout fonctionne et c'est parfait.

    Mais je dois pouvoir sauvegarder ce qui est affiché par le TChart dans un fichier JPG.
    Et là, c'est le drame : tout est sauvegardé sauf ce que je mets dans le Chart1.canvas !

    Pour moi c'est un bug non ?
    Google ne m'a été d'aucune aide, dans le meilleur des cas, j'ai fini par obtenir une image noir au lieu de celle de mon Tchart sans le Canvas.

    J'ai fini par mettre en place une solution qui fonctionne mais qui est "sale" elle consiste à mettre le TChart dans un TPanel et à sauvegarder non pas le TChart mais le TPanel et là j'ai tout
    Mais c'est moche et je n'aime pas ce qui est moche. Il y aurait-il une autre solution ?

    Ceci fonctionne :
    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
    procedure TForm1.ButtonGraph1Click(Sender: TObject);
    var
      lRect: TRect;
      lFormBitmap: Graphics.TBitmap;
      j:TJPEGImage;
    begin
      savedialog1.filename:='graph2d.jpg';
       if savedialog1.execute then
          begin
             if fileexists(savedialog1.filename) then DeleteFile(savedialog1.filename);
             lRect := PanelChart.ClientRect;
             lFormBitmap := Graphics.TBitmap.Create;
             try
                lFormBitmap.Width := PanelChart.ClientWidth;
                lFormBitmap.Height := PanelChart.ClientHeight;
                lFormBitmap.Canvas.CopyRect( Rect(0,0,lFormBitmap.Width-1,lFormBitmap.Height-1), PanelChart.Canvas,lRect);
                j := TJPEGImage.Create;
                try
                  j.Assign(lFormBitmap);
                  j.CompressionQuality:=90;
                  j.savetofile(savedialog1.filename);
                finally
                  j.free;
                end;
             finally
               lFormBitmap.Free;
             end;
          end;
    end;
    Ceci ne me recopie que le TChart avec ses 2 TSeries sans le Chart.Canvas (ce qui je pense est un bug)

    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
    procedure TForm1.ButtonGraph1Click(Sender: TObject);
    var
      jpg: TRasterImage;
    begin
      savedialog1.filename:='graph2d.jpg';
       if savedialog1.execute then
          begin
            jpg := Chart1.SaveToImage(TJpegImage);
            try
              TJPegImage(jpg).CompressionQuality:=90; 
        jpg.SaveToFile(savedialog1.filename);
      finally
        jpg.Free;
      end;
    end;
    Peut-être avez-vous déjà rencontrer ce type de problème et avez-vous une solution ?
    Sinon tant pis.

  2. #2
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Bonsoir Christophe

    Le fait que ce que tu dessines ne s'enregistre pas est normal car en passant par le canvas c'est sur le control (donc par dessus) que tu dessine et non pas dans le contenu de ce que TAChart affiche.

    Le mieux à mon avis (je ne connais pas trop ce composant) de ce que j'ai vu vite fait, c'est de passer par l'evenement

    OnAfterDraw et se servir du canvas de ADrawer : IChartDrawer pour tracer ton graphique.

    Puis il te suffira (normalement) de te servir de la méthode SaveToFile/ SaveToBitmapFile pour enregistrer ton image

    Bonne soirée

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

Discussions similaires

  1. [Lazarus] Souci de connexion avec la base de bugs de Lazarus
    Par didiergm dans le forum Lazarus
    Réponses: 3
    Dernier message: 04/04/2009, 19h04
  2. Save file from url export
    Par dkoneeee dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/11/2007, 19h59
  3. Saving video from video
    Par Ivory69 dans le forum wxWidgets
    Réponses: 0
    Dernier message: 09/10/2007, 14h33
  4. [LAZARUS] afficher un jpg dans un timage
    Par histoblog dans le forum Delphi
    Réponses: 2
    Dernier message: 24/11/2006, 17h01
  5. Réponses: 2
    Dernier message: 18/02/2006, 09h20

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