绘图控制到存储器(位图)(Drawing control to memory (Bitmap))

2019-07-20 03:31发布

是否有可能得出一个WPF控件内存(位图),而不在屏幕上绘制呢?
我发现如何保存为位图的例子,但是当窗口已经在屏幕上绘制它才会起作用。

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

Answer 1:

由于控制没有父容器,你需要调用措施和安排 ,以做一个适当的布局。 由于布局是异步完成(见备注措施和安排 ),您可能还需要调用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 ,你可以使用的尺寸参数的元素:

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


文章来源: Drawing control to memory (Bitmap)