2
私は動的にグラフを生成し、それを画像ファイルに保存しています(UIに表示する必要はありません)。WPFコードのグラフのコードは次のとおりです。WPFでグラフを動的に書き出す方法は?
<chart:PieChart
Name="chart1"
Style="{StaticResource MinimalChartStyle}"
ChartTitle="Minimal Pie Chart"
ChartSubTitle="Chart with fixed width and height"
SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}" Height="Auto" Width="Auto" >
<chart:PieChart.Series>
<chart:ChartSeries
SeriesTitle="Errors"
DisplayMember="Category"
ValueMember="Number"
ItemsSource="{Binding Path=Errors}" />
</chart:PieChart.Series>
</chart:PieChart>
.csコードのように。
public ObservableCollection<TestClass> Errors { get; private set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
Errors = new ObservableCollection<TestClass>();
Errors.Add(new TestClass() { Category = "Globalization", Number = 75 });
Errors.Add(new TestClass() { Category = "Features", Number = 2 });
Errors.Add(new TestClass() { Category = "ContentTypes", Number = 12 });
Errors.Add(new TestClass() { Category = "Correctness", Number = 83 });
Errors.Add(new TestClass() { Category = "Best Practices", Number = 29 });
}
と私は何をしようとしていますが、上記のようなグラフを作成し、さらに参考のためにファイルに保存することができた以下のような方法です。
public bool buildChart() {
ClusteredBarChart newchart = new ClusteredBarChart();
//newchart.ActualWidth = 500; inaccessible
//newchart.ActualHeight = 400;
// T.B.D
...
...
newchart.DataContext = Errors;
saveTheChartToFile(newchart);
return true;
}
public bool saveTheChartToFile(ChartBase view)
{
Size size = new Size(view.ActualWidth, view.ActualHeight);
if (size.IsEmpty)
return false;
RenderTargetBitmap result = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96, 96, PixelFormats.Pbgra32);
DrawingVisual drawingvisual = new DrawingVisual();
using (DrawingContext context = drawingvisual.RenderOpen())
{
context.DrawRectangle(new VisualBrush(view), null, new Rect(new Point(), size));
context.Close();
}
result.Render(drawingvisual);
BitmapEncoder encoder = new JpegBitmapEncoder();
MemoryStream file = new MemoryStream();
encoder.Frames.Add(BitmapFrame.Create(result));
encoder.Save(file);
System.IO.File.WriteAllBytes("d:\\ppp.jpeg", file.ToArray());
return true;
}
あなたが明示的に特定の幅と高さをXAMLで静的なグラフを作成し、その上で使用する前に、ファイルにエクスポートする必要があることと思われます。助けてもらえますか?
動作するようには思えません。そして出力は黒です – Rich
私の編集された答えでコードを試してください。 – mm8
こんにちはmm8、ありがとう。このコードは、静的なチャートをファイルに保存するのに最適です。しかし、実際には、私が望んでいたのは、プログラムでグラフを作成して保存することでした。私が使用するWPFチャートコンポーネント(wpfのMetro UI)では、スタティックチャートの可視性を「折りたたみ」または「非表示」に変更しても動作しません。 – Rich