Elemental
2004-07-27, 08:38:14
Hallo,
ich arbeite gerade an einer Klasse, die PieCharts malt.
Die Klasse kann ein bitmap des Charts und ein bitmap der Legende erzeugen:
//fill datasource with some test data
PieChartDataSource dataSource = new PieChartDataSource();
dataSource.Add(new PieSliceData("Running", 1841200, Color.Green));
dataSource.Add(new PieSliceData("Waiting", 290000, Color.Blue));
dataSource.Add(new PieSliceData("Blocked", 181000, Color.Yellow));
dataSource.Add(new PieSliceData("Interruption", 62000, Color.Orange));
dataSource.Add(new PieSliceData("Fault", 45000, Color.Red));
PieChart chart = new PieChart(dataSource);
Bitmap chartBmp = chart.DrawChart(new Size(800,600));
chartBmp.Save(@"d:\chart.bmp");
Bitmap legendBmp = chart.DrawLegend();
legendBmp.Save(@"d:\legend.bmp");
Momentan versuche ich mich daran, dass die Legende im gleichen bitmap wie das Chart gezeichnet wird.
Jetzt zu meinem Problem:
I kann jetzt ein bitmap vom chart mit Legende erzeugen:
PieChart chart = new PieChart(dataSource);
chart.DrawLegendInChart = true;
chart.LegendPosition = Position.top;
Bitmap chartBmp = chart.DrawChart(new Size(800,600));
chartBmp.Save(@"d:\chart.bmp");
und ich kann auch ein eigenes bitmap mit der seperaten Legende erzeugen:
Bitmap legendBmp = chart.DrawLegend();
legendBmp.Save(@"d:\legend.bmp");
Beide Code-Schnipsel funktionieren für sich problemlos. Aber wenn ich beide ausführen lasse
PieChart chart = new PieChart(dataSource);
chart.DrawLegendInChart = true;
chart.LegendPosition = Position.top;
Bitmap chartBmp = chart.DrawChart(new Size(800,600));
chartBmp.Save(@"d:\chart.bmp");
Bitmap legendBmp = chart.DrawLegend();
legendBmp.Save(@"d:\legend.bmp");
dann krieg ich eine Exception in der DrawLegend() Methode.
Dieser Aufruf
graphics.DrawString(strText, m_FontLegend, blackBrush, iStartX, iStartY);
schmeisst die Exception:
TargetSite.DeclaringType: System.Drawing.Graphics
TargetSite.Name: CheckErrorStatus
Message: Invalid parameter used
Aber wie kann es sein, dass der code funktioniert, wenn ich vorher kein chart mit legende zeichnen lasse, sondern nur die Legende?
Bin für jede Hilfe dankbar!
Gruss
Bernd
ich arbeite gerade an einer Klasse, die PieCharts malt.
Die Klasse kann ein bitmap des Charts und ein bitmap der Legende erzeugen:
//fill datasource with some test data
PieChartDataSource dataSource = new PieChartDataSource();
dataSource.Add(new PieSliceData("Running", 1841200, Color.Green));
dataSource.Add(new PieSliceData("Waiting", 290000, Color.Blue));
dataSource.Add(new PieSliceData("Blocked", 181000, Color.Yellow));
dataSource.Add(new PieSliceData("Interruption", 62000, Color.Orange));
dataSource.Add(new PieSliceData("Fault", 45000, Color.Red));
PieChart chart = new PieChart(dataSource);
Bitmap chartBmp = chart.DrawChart(new Size(800,600));
chartBmp.Save(@"d:\chart.bmp");
Bitmap legendBmp = chart.DrawLegend();
legendBmp.Save(@"d:\legend.bmp");
Momentan versuche ich mich daran, dass die Legende im gleichen bitmap wie das Chart gezeichnet wird.
Jetzt zu meinem Problem:
I kann jetzt ein bitmap vom chart mit Legende erzeugen:
PieChart chart = new PieChart(dataSource);
chart.DrawLegendInChart = true;
chart.LegendPosition = Position.top;
Bitmap chartBmp = chart.DrawChart(new Size(800,600));
chartBmp.Save(@"d:\chart.bmp");
und ich kann auch ein eigenes bitmap mit der seperaten Legende erzeugen:
Bitmap legendBmp = chart.DrawLegend();
legendBmp.Save(@"d:\legend.bmp");
Beide Code-Schnipsel funktionieren für sich problemlos. Aber wenn ich beide ausführen lasse
PieChart chart = new PieChart(dataSource);
chart.DrawLegendInChart = true;
chart.LegendPosition = Position.top;
Bitmap chartBmp = chart.DrawChart(new Size(800,600));
chartBmp.Save(@"d:\chart.bmp");
Bitmap legendBmp = chart.DrawLegend();
legendBmp.Save(@"d:\legend.bmp");
dann krieg ich eine Exception in der DrawLegend() Methode.
Dieser Aufruf
graphics.DrawString(strText, m_FontLegend, blackBrush, iStartX, iStartY);
schmeisst die Exception:
TargetSite.DeclaringType: System.Drawing.Graphics
TargetSite.Name: CheckErrorStatus
Message: Invalid parameter used
Aber wie kann es sein, dass der code funktioniert, wenn ich vorher kein chart mit legende zeichnen lasse, sondern nur die Legende?
Bin für jede Hilfe dankbar!
Gruss
Bernd