我基本上希望将图表保存为图像以合并到我的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();
但仍然只获得空白图像和控件不会在图像上呈现。
答案 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);
}
}
这解决了我的问题。