1

我基本上希望将图表另存为图像以合并到我的 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 是图表控件,如果我将 mychart 添加到窗口,它会很好地显示图表。所以,我知道 Chart 控件正在工作,只是它不在窗口上时不会呈现。

编辑:我也这样做

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

但仍然只得到空白图像,并且控制不是在图像上渲染。

4

1 回答 1

2

RenderTargetBitmap 产生黑色图像时遇到了同样的问题。

我使用这种方法:

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);
    }
}

我的问题是我的 FrameworkeElement 是一个 Window 对象,以前没有 .Show()'ed。没有警告或异常。只是黑色图像。

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

我的解决方案是改变:

SaveToImage(view);

进入:

SaveToImage((FrameworkElement)view.Content);

这解决了我的问题。

于 2016-10-06T20:15:35.517 回答