是否可以在不绘制屏幕的情况下将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);
答案 0 :(得分:5)
由于控件没有父容器,因此您需要调用Measure和Arrange才能进行正确的布局。由于布局是异步完成的(请参阅Measure和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;
}
如果您已经设置了元素的Width
和Height
,则可以将其用于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));