private Brush MakeBrushFromVisual(Visual visual, Rect bounds, int dpi) { var viewport3D = visual as Viewport3D; if (viewport3D == null) { Drawing drawing = VisualTreeHelper.GetDrawing(visual); if (this.drawOutlines) { bounds.Inflate(outlinePen.Thickness / 2, outlinePen.Thickness / 2); } var offsetMatrix = new Matrix(1, 0, 0, 1, -bounds.Left, -bounds.Top); var offsetMatrixTransform = new MatrixTransform(offsetMatrix); offsetMatrixTransform.FreezeIfPossible(); var drawingVisual = new DrawingVisual(); using (var drawingContext = drawingVisual.RenderOpen()) { drawingContext.PushTransform(offsetMatrixTransform); if (this.drawOutlines) { drawingContext.DrawRectangle(null, outlinePen, bounds); } drawingContext.DrawDrawing(drawing); drawingContext.Pop(); } visual = drawingVisual; } var renderTargetBitmap = VisualCaptureUtil.RenderVisual(visual, bounds.Size, dpi, viewport3D: viewport3D); renderTargetBitmap.FreezeIfPossible(); var imageBrush = new ImageBrush(renderTargetBitmap); imageBrush.FreezeIfPossible(); return(imageBrush); }