Цель
Сделайте снимок экрана элемента управления (или набора элементов управления) с помощью RenderTargetBitmap
.
Источник:
<Grid Height="200" Width="500">
<!-- Here goes any content, in my case, a Label or a Shape-->
<Label VerticalAligment="Top" HorizontalAligment="Left" Content="Text">
</Grid>
Ожидаемый результат:
Способ 1
Этот в основном использует UIElement
в качестве источника RenderTargetBitmap
.
public static ImageSource GetRender(this UIElement source)
{
double actualHeight = source.RenderSize.Height;
double actualWidth = source.RenderSize.Width;
var renderTarget = new RenderTargetBitmap((int)Math.Round(actualWidth),
(int)Math.Round(actualHeight), 96, 96, PixelFormats.Pbgra32);
renderTarget.Render(source);
return renderTarget;
}
Результат:
Способ 2:
Вместо того, чтобы напрямую устанавливать UIElement
в качестве источника RenderTargetBitmap
, я буду использовать VisualBrush
.
//Same RenderTargetBitmap...
DrawingVisual dv = new DrawingVisual();
using (DrawingContext ctx = dv.RenderOpen())
{
VisualBrush vb = new VisualBrush(target);
ctx.DrawRectangle(vb, null, new Rect(new Point(), bounds.Size));
}
rtb.Render(dv);
Результат:
Этот игнорирует положение и размер Grid
и Label
внутри:
Что тут происходит?