0

データを表示する DVC チャートがあります。グラフをエクスポートするボタンを作成しました。

コードは次のとおりです。

private void btnExptGraph_Click(object sender, RoutedEventArgs e)
{
    RenderTargetBitmap renderBitmap = new RenderTargetBitmap((int)mcChart.ActualWidth, (int)mcChart.ActualHeight,96d, 96d, PixelFormats.Pbgra32);
    renderBitmap.Render(mcChart);

    Console.WriteLine(renderBitmap.ToString());

    //JpegBitmapEncoder encode = new JpegBitmapEncoder();
    PngBitmapEncoder encode = new PngBitmapEncoder();
    encode.Frames.Add(BitmapFrame.Create(renderBitmap));

    string filename = "test.bmp";

    FileStream fout = new FileStream(filename, FileMode.Create);

    encode.Save(fout);

    MessageBox.Show("File Saved Successfully");
    fout.Close();
}

したがって、私の問題は、ファイルが基本的に空であることを除いて、これが適切に実行されることです。サイズが1KBのファイルしかなく、グラフはありません。

MSDN のドキュメントやその他のスタック オーバーフローの例を見てきました。それらはすべてこの形式に従っており、人々はそれが機能すると主張しています. デバッガーで実行したところ、renderBitmap オブジェクトは必要なすべてのプロパティで正しい高さと重量の値を取得しています。何か案は?

4

1 に答える 1

0

私の友人がそれを見て、これが私たちが思いついた解決策であり、うまくいきました:

        Size size = new Size(mcChart.ActualWidth, mcChart.ActualHeight);
        if (size.IsEmpty)
            return;

        size.Height *= 2;
        size.Width *= 2;

        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(mcChart), null, new Rect(new Point(), size));
            context.Close();
        }
        result.Render(drawingvisual);

        string filename = "test.png";
        FileStream fout = new FileStream(filename, FileMode.Create);

        PngBitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(result));

        encoder.Save(fout);

        fout.Close();
        MessageBox.Show("Done");
于 2016-04-13T18:05:43.017 に答える