将控制绘制到内存(位图)

是否可以在不绘制屏幕的情况下将wpf控件绘制到内存(Bitmap)?
我找到了一个如何保存到Bitmap的示例,但它仅在窗口中绘制窗口时才有效。

BitmapImage bitmap = new BitmapImage(); RenderTargetBitmap renderTarget = new RenderTargetBitmap((int)canvaspad.Width, (int)canvaspad.Height, 96, 96, System.Windows.Media.PixelFormats.Default); renderTarget.Render(canvaspad); 

由于控件没有父容器,因此需要调用Measure and Arrange以进行正确的布局。 由于布局是异步完成的(请参阅测量和排列中的备注),您可能还需要调用UpdateLayout以强制立即更新布局。

 public BitmapSource RenderToBitmap(UIElement element, Size size) { element.Measure(size); element.Arrange(new Rect(size)); element.UpdateLayout(); var bitmap = new RenderTargetBitmap( (int)size.Width, (int)size.Height, 96, 96, PixelFormats.Default); bitmap.Render(element); return bitmap; } 

如果您已经设置了元素的WidthHeight ,则可以将其用于size参数:

 var grid = new Grid { Width = 200, Height = 200, Background = Brushes.Yellow }; grid.Children.Add( new Ellipse { Width = 100, Height = 100, Fill = Brushes.Blue }); var bitmap = RenderElement(grid, new Size(grid.Width, grid.Height));