0

Visiblox チャートを画像にレンダリングして、何百ものチャートを同時に表示できるようにしようとしています。チャートはコードで生成され、表示せずにレンダリングされます。

私が直面している問題は、レンダリング後にチャートが空に見えることです。上のコントロールはチャートで、下のコントロールはコントロールに追加する前にレンダリングされたチャートです。透かしがあるため、一部のレンダリングが行われています。

グラフは、バインディングとデータ コンテキストを使用して設定されています (重要な場合に備えて)。レンダリングする前にグラフを見ると、実質的に空のように見えます。おかげで、 「 UserControl によってバインディングが取得されるのはいつですか?

そして、これは私が画像をレンダリングするために使用しているコードです:

    public BitmapSource Render(FrameworkElement control)
    {
        if (control == null)
        {
            throw new ArgumentNullException("control");
        }

        control.UpdateLayout();

        Viewbox viewBox = new Viewbox();
        viewBox.Child = control; // Control to render
        viewBox.Measure(new System.Windows.Size(control.Width, control.Height));
        viewBox.Arrange(new Rect(0, 0, control.Width, control.Height));
        viewBox.ApplyTemplate();
        viewBox.UpdateLayout();

        RenderTargetBitmap renderer = new RenderTargetBitmap((int)(control.Width * _dpiX / 96.0), (int)(control.Height * _dpiY / 96.0), _dpiX, _dpiY, PixelFormats.Pbgra32);

        DrawingVisual drawingVisual = new DrawingVisual();
        using (DrawingContext drawingContext = drawingVisual.RenderOpen())
        {
            VisualBrush visualBrush = new VisualBrush(viewBox);
            drawingContext.DrawRectangle(visualBrush, null, new Rect(new Point(), new System.Windows.Size(control.Width, control.Height)));
        }

        renderer.Render(drawingVisual);

        // Remove the container to be able to reuse the control again if we appended it to a viewbox
        viewBox.Child = null;

        return renderer;
    }

ここに画像の説明を入力

4

1 に答える 1

1

Visiblox チャートを画像に保存することに関心がある場合は、Visiblox ブログにいくつかのサンプル コードがあります。ここで記事を見つけることができます - http://www.visiblox.com/blog/2011/09/ Saving -a-chart-as-an-image

この記事では、Silverlight でイメージにエクスポートする方法を説明していますが、ダウンロードには、WPF でも行う方法を示すサンプル コードが含まれています。

以前にアプリケーションでこの手法を使用したことがありますが、そのサンプル コードを使用することが、開始するのに最適な場所であることが常にわかりました。

うまくいかない場合はお知らせください - 私はこれについてかなり多くの経験を持っています! 私のヒントは、正しい時間にチャートで Invalidate() を呼び出したことを確認し、エクスポートする前にレイアウトが更新されていることを確認することです。

于 2012-04-18T14:46:11.597 に答える