Ich habe ein kleines Problem. Ich möchte meine Diagramme in ein Bild exportieren. Ich weiß, dass das mit dem Code von beto-rodriguez möglich ist (here).C# Diagramm mit LiveCharts
Aber ich habe ein Problem, ich kann nicht haben, was ich haben könnte, indem Sie es auf dem Bildschirm anzeigen. Siehe das Bild oben. Unten rechts habe ich das Bild in png gespeichert. Und auf der linken Seite des Bildes habe ich das Diagramm mit allen Parametern angezeigt, wo ich will.
Wissen Sie, ob es möglich ist, das gleiche Diagramm (links) im gespeicherten Bild zu haben? Eigentlich verwende ich einen Thread, um das Bild automatisch zu erfassen (kopieren/einfügen).
Wissen Sie, was sind die Parameter, die ich einstellen muss, um das richtige Bild zu haben?
Vielen Dank im Voraus. Grüße.
********************************* Nach bearbeiten
Sorry für meine späte repsonse. Ich versuche, was du gesagt hast, aber unzensiert kann ich nicht machen, dass ich will. Ich werde erklären, was ich tue: Ich habe eine Klasse „MakeReport“, die eine andere Klasse „GraphMaker“ mit anrufen:
MyGraph = new GraphMaker();
MyGraph = GiveAGraph(MyGraph);
Und die Klasse „MakeReport“ wird das Diagramm mit einigen Werten mit dem Unter vervollständigen Programm "GiveAGraph()":
GraphData.SeriesCollection.Add(new RowSeries
{
Title = Criteria,
Values = DataValues,
ScalesYAt = Index,
DataLabels = true
});
Ende "GiveAGRaph()".
Jetzt habe ich ein Diagramm bereit angezeigt werden, ich will, es benutzen, um ein Bild zu machen und für den Test (und debug) i zeige es:
// Chart to Image
MyGraph.GiveMeAnImageFromChart(); <-- to make a picture with the chart
// Show the graph
MyGraph.Show(); <-- for debug and test, i display it.
Mit "MyGraph.GiveAnImageFromChart()", i habe nicht das gleiche Ergebnis wie "MyGraph.Show()". Das Bild (Speichern als PNG) unterscheidet sich von dem angezeigten Diagramm.
Das Unterprogramm "GiveAnImageFromChart", die in der "GraphMaker" Klasse ist:
public void GiveMeAnImageFromChart()
{
var viewbox = new Viewbox();
myChart.Background = Brushes.White;
myChart.DataContext = this;
// myChart il faut tout mettre en paramètres
viewbox.Child = myChart;
viewbox.Measure(myChart.RenderSize);
viewbox.Arrange(new Rect(new Point(0, 0), myChart.RenderSize));
myChart.Update(true, true); //force chart redraw
viewbox.UpdateLayout();
SaveToPng(myChart, "chart.png");
//png file was created at the root directory.
}
Die "myChart" Variable öffentlich ist. Das verwendete Programm "SaveToPng" stammt aus Ihrem Beispiel (here).
das Bild zu speichern, ich versuche mit folgenden Methode:
public System.Drawing.Bitmap ControlToImage(Visual target, double dpiX, double dpiY)
{
if (target == null)
{
return null;
}
// render control content
Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
Console.WriteLine("Bounds width = " + bounds.Width + " et bounds height = " + bounds.Height);
RenderTargetBitmap rtb = new RenderTargetBitmap((int)(bounds.Width * dpiX/96.0),
(int)(bounds.Height * dpiY/96.0),
dpiX,
dpiY,
PixelFormats.Pbgra32);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext ctx = dv.RenderOpen())
{
VisualBrush vb = new VisualBrush(target);
ctx.DrawRectangle(vb, null, new Rect(new System.Windows.Point(), bounds.Size));
}
rtb.Render(dv);
//convert image format
MemoryStream stream = new MemoryStream();
BitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rtb));
encoder.Save(stream);
return new System.Drawing.Bitmap(stream);
}
mit:
Bitmap ImageChart = MyGraph.ControlToImage(MyGraph, MyGraph.Width, MyGraph.Height);
Mit dieser Methode, ich habe einen Fehler, da die "bounds.Width" und „Grenzen .Höhe "sind gleich -8. Und schließlich habe ich kein Diagramm zum Konvertieren.
Ich denke, ich gebe ein falsches "visual Target" in der "ControlImage" und ich vermisse etwas, aber ich weiß nicht was. Wenn Sie weitere Informationen benötigen, fragen Sie mich. Vielen Dank im Voraus für Ihre Hilfe.
PS: Entschuldigung für mein Englisch. Zögere nicht, mich zu korrigieren.