C#/WPF

[WPF] 컨트롤 캡쳐하기 (FrameworkElement Capture)

kjun.kr 2022. 8. 7. 22:20
728x90
728x170

화면의 모든 내용을 캡쳐할 일이 생겼는데 아래 코드를 이용하면 화면의 모든 내용을 캡쳐할수 있다.

/// <summary>
/// Element 를 Capture 하여 저장합니다.
/// </summary>
/// <param name="element">컨트롤명</param>
/// <param name="filePath">저장파일명</param>
private void CaputreControl(FrameworkElement element, string filePath)
{
    Rect rectangle = new Rect(0, 0, element.ActualWidth, element.ActualHeight);

    DrawingVisual visual = new DrawingVisual();

    using (DrawingContext context = visual.RenderOpen())
    {
        VisualBrush brush = new VisualBrush(element);

        context.DrawRectangle(brush, null, new Rect(rectangle.Size));
    }

    int width = (int)element.ActualWidth;
    int height = (int)element.ActualHeight;

    RenderTargetBitmap bitmap = new RenderTargetBitmap
    (
        width,
        height,
        96,
        96,
        PixelFormats.Pbgra32
    );

    bitmap.Render(visual);

    PngBitmapEncoder encoder = new PngBitmapEncoder();

    encoder.Frames.Add(BitmapFrame.Create(bitmap));

    using (FileStream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
    {
        encoder.Save(stream);
    }
}

실행화면 (하늘색 부분이 캡쳐할 영역)

저장파일


소스
https://github.com/kei-soft/KJunBlog/tree/master/Wpf.ControlCapture

728x90
그리드형