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:
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:
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.