FlexChart for WinForms
エクスポート

チャートのエクスポートとは、チャートを別のファイル形式に保存して、エンドユーザーが後で使用できるようにすることです。たとえば、チャートを画像として保存すると、プレゼンテーションなどの用途で使用できます。

画像として保存

FlexChart には、FlexChartBase クラスの SaveImage メソッドが用意されています。これにより、指定したストリームにチャートを画像として保存できます。このメソッドは、ストリーム、画像形式、画像の幅と高さの 4 つのパラメータを受け取ります。現在 FlexChart コントロールがサポートしている形式は .png.jpeg、および .svg です。

また、FlexChartBase クラスには SaveImage (int w, int h) メソッドが用意されており、画像の幅と高さの 2 つのパラメータを受け取って、チャートを画像としてクリップボードに保存できます。

チャートのエクスポート

private void btnSave_Click(object sender, EventArgs e)
{
    var filter = "JPEG Image(*.jpg)|*.jpeg|PNG Image(*.png)|*.png|SVG Image(*.svg)|*.svg";
    SaveFileDialog sfd = new SaveFileDialog() { OverwritePrompt = true, Filter = filter };
    var format = ImageFormat.Jpg;
    if (sfd.ShowDialog() == DialogResult.OK)
    {
        using (var fileStream = sfd.OpenFile())
        {
            var fmt = Path.GetExtension(sfd.FileName);
            switch (fmt)
            {
                case ".png":
                    format = ImageFormat.Png;
                    break;
                case ".svg":
                    format = ImageFormat.Svg;
                    break;
            }
            // チャートを画像として指定されたストリームに保存します
            flexChart1.SaveImage(fileStream, format, flexChart1.Width, flexChart1.Height);                   
            // チャートを画像としてクリップボードに保存します
            flexChart1.SaveImage(flexChart1.Width, flexChart1.Height);                   
        }
    }
}
Private Sub btnSave_Click(sender As Object, e As EventArgs)
    Dim filter As String = "JPEG Image(*.jpg)|*.jpeg|PNG Image(*.png)|*.png|SVG Image(*.svg)|*.svg"
    Dim sfd As New SaveFileDialog() With {
         .OverwritePrompt = True,
         .Filter = filter
    }
    Dim format As ImageFormat = ImageFormat.Jpg
    If sfd.ShowDialog() = DialogResult.OK Then
        Using fileStream As Stream = sfd.OpenFile()
            Dim fmt As String = Path.GetExtension(sfd.FileName)
            Select Case fmt
                Case ".png"
                    format = ImageFormat.Png
                    Exit Select
                Case ".svg"
                    format = ImageFormat.Svg
                    Exit Select
            End Select
            ' チャートを画像として指定されたストリームに保存します
            flexChart1.SaveImage(fileStream, format, flexChart1.Width, flexChart1.Height)
            ' チャートを画像としてクリップボードに保存します
            flexChart1.SaveImage(flexChart1.Width, flexChart1.Height)
        End Using
    End If
End Sub

シリアライズ

シリアライズとは、チャートオブジェクトを保存および送信可能なバイトシーケンスまたはファイルに変換することです。一般にこれは、オブジェクトに関連するデータをあるアプリケーションから別のアプリケーションに転送し、後で別のアプリケーションで同じデータを複製して使用できるようにする必要がある場合に使用されます。

FlexChart では、C1.Win.Chart.Serialization アセンブリを使用して、チャートをさまざまなファイル形式にシリアライズできます。このアセンブリは、C1.Win.Chart.Serialization という名前の製品サンプルをビルドし、プロジェクト内の obj\Debug フォルダにアクセスすることで取得できます。このアセンブリは Serializer クラスを提供します。このクラスは、チャートを xml、json、バイナリ、および base64 形式にシリアライズするメソッドを提供します。この例では、これらの形式にチャートをシリアライズする SerializeChartToFile メソッドを使用しています。このメソッドは、FlexChart オブジェクトプロパティの格納先となるファイル名、シリアライズする FlexChart インスタンス、FlexChart インスタンスを保存するファイル形式の 3 つのパラメータを受け取ります。同様に、特定の形式(この場合は XML)にチャートをシリアライズする SerializeChartToXml などのメソッドを使用することもできます。

メモ: ComponentOneC1ControlPanel.exe を使用して WinForms Edition をインストールする際にサンプルをインストールした場合、「C1.Win.Chart.Serialization」サンプルは、システムの \Documents\ComponentOne Samples\WinForms\v4.5.2\C1FlexChart\CS\FlexChartSerializer にあります。

private void btnExport_Click(object sender, EventArgs e)
{
    var filter = "XML File (*.xml)|*.xml";
    var format = "xml";
    SaveFileDialog sfd = new SaveFileDialog() { OverwritePrompt = true, Filter = filter };
    if (sfd.ShowDialog() == DialogResult.OK)
    {
        var fmt = Path.GetExtension(sfd.FileName);
        Serializer.SerializeChartToFile(sfd.FileName, flexChart1, format);
    }
}
Private Sub btnExport_Click(sender As Object, e As EventArgs)
    Dim filter As String = "XML File (*.xml)|*.xml"
    Dim format As String = "xml"
    Dim sfd As New SaveFileDialog() With {
         .OverwritePrompt = True,
         .Filter = filter
    }
    If sfd.ShowDialog() = DialogResult.OK Then
        Dim fmt As String = Path.GetExtension(sfd.FileName)
        Serializer.SerializeChartToFile(sfd.FileName, flexChart1, format)
    End If
End Sub

シリアライズ解除

シリアライズ解除とは、バイトストリームに格納されたオブジェクトの状態を読み取って元のオブジェクトをインポートするプロセスのことです。 FlexChart では、シリアライズと同様に、C1.Win.Chart.Serialization アセンブリの Serializer クラスで公開されるさまざまなシリアライズ解除メソッドを使用して、特定のファイル形式で保存された設定をシリアライズ解除し、チャートを再構築できます。この例では、3 つのパラメータを受け取り、任意のファイル形式からチャートを再作成できる DeserializeChartFromFile メソッドを使用しています。3 つのパラメータは、FlexChart オブジェクトのプロパティを含むファイルの名前、復元対象の FlexChart インスタンス、および FlexChart インスタンスの復元元になるファイルの形式です。

private void btnImport_Click(object sender, EventArgs e)
{
    var filter = "XML File (*.xml)|*.xml";
    var format = "xml";
    OpenFileDialog ofd = new OpenFileDialog() { Filter = filter };
    if (ofd.ShowDialog() == DialogResult.OK)
    {
        var fmt = Path.GetExtension(ofd.FileName);
        Serializer.DeserializeChartFromFile(ofd.FileName, flexChart1, format);
    }
}
Private Sub btnImport_Click(sender As Object, e As EventArgs)
    Dim filter As String = "XML File (*.xml)|*.xml"
    Dim format As String = "xml"
    Dim ofd As New OpenFileDialog() With {
         .Filter = filter
    }
    If ofd.ShowDialog() = DialogResult.OK Then
        Dim fmt As String = Path.GetExtension(ofd.FileName)
        Serializer.DeserializeChartFromFile(ofd.FileName, flexChart1, format)
    End If
End Sub