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
그리드형