Drawing control to memory (Bitmap)

后端 未结 1 1682
我寻月下人不归
我寻月下人不归 2020-11-30 15:29

Is it possible to draw a wpf control to memory (Bitmap) without drawing on the screen at all?
I found an example of how to save to Bitmap, but it only works when the win

相关标签:
1条回答
  • 2020-11-30 15:40

    As the control has no parent container, you need to call Measure and Arrange in order to do a proper layout. As layout is done asynchronously (see Remarks in Measure and Arrange), you may also need to call UpdateLayout to force the layout to be updated immediately.

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

    In case you have already set the Width and Height of the element you may use that for the size parameter:

    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));
    
    0 讨论(0)
提交回复
热议问题