WPF工具包图表:如何将它们保存为图像

时间:2013-07-22 07:53:15

标签: c# wpftoolkit

我基本上希望将图表保存为图像以合并到我的PDF报告中。我喜欢WPF Toolkit图表,如果它们显示在Form上,可以保存它们的图像。但是,由于我正在处理后台服务,我们没有显示可视元素,因此我不知道如何保存图像,因为我的图像保存代码:

renderBitmap = new RenderTargetBitmap(400, 400, 96, 96, PixelFormats.Pbgra32);
DrawingVisual isolatedVisual = new DrawingVisual();
drawing.DrawRectangle(new VisualBrush(mychart), null, new Rect(new Point(), bounds.Size));
renderBitmap.Render(isolatedVisual);

仅提供黑色图像。我的图表是图表控件,如果我将mychart添加到窗口,它会显示图表。所以,我知道Chart控件正在工作,只是当它不在窗口时它不会渲染。

编辑:我也是

 mychart.Measure(size);
 mychart.Arrange(new Rect(size));
 mychart.UpdateLayout();

但仍然只获得空白图像和控件不会在图像上呈现。

1 个答案:

答案 0 :(得分:1)

我在渲染黑色图像的RenderTargetBitmap中遇到了同样的问题。

我使用这种方法:

11/5 = 2

我的问题是我的FrameworkeElement是一个Window对象,之前没有.Show()。没有警告或例外。只是黑色图像。

如果我调用.Show(),那么一切都按预期工作。

我的解决方案是改变:

1

分为:

public static void SaveAsImage(
    FrameworkElement element, 
    string filepath, 
    int width, 
    int height)
{
    element.Width = width;
    element.Height = height;
    element.Measure(new Size(width, height));
    element.Arrange(new Rect(0, 0, width, height));
    element.UpdateLayout();

    var target = new RenderTargetBitmap(
        width, height,
        96, 96, System.Windows.Media.PixelFormats.Pbgra32);

    target.Render(element);

    var encoder = new PngBitmapEncoder();
    var outputFrame = BitmapFrame.Create(target);
    encoder.Frames.Add(outputFrame);

    using (var file = File.OpenWrite(filepath))
    {
        encoder.Save(file);
    }
}

这解决了我的问题。