private void Snapshot(UIElement source, double scale, int quality) { double actualHeight = source.RenderSize.Height; double actualWidth = source.RenderSize.Width; double renderHeight = actualHeight * scale; double renderWidth = actualWidth * scale; RenderTargetBitmap renderTarget = new RenderTargetBitmap((int)renderWidth, (int)renderHeight, 96, 96, PixelFormats.Pbgra32); VisualBrush sourceBrush = new VisualBrush(source); DrawingVisual drawingVisual = new DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen(); using (drawingContext) { //drawingContext.PushTransform(new ScaleTransform(scale, scale)); drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(actualWidth, actualHeight))); } renderTarget.Render(drawingVisual); JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder(); jpgEncoder.QualityLevel = quality; jpgEncoder.Frames.Add(BitmapFrame.Create(renderTarget)); using (FileStream stm = File.OpenWrite(@"C:\test2.png")) jpgEncoder.Save(stm); }
일단 소스는 이렇다 source에 해당 usercontrol을 넣는다.
만약 DrawingVisual에 넣어서 rectangle을 만들지 않으면 해당 유저컨트롤만 찍히는게 아니라 전체가 찍힌다.
전체가 찍히긴하지만 해당 컨트롤만 나옴
참고 :
http://www.grumpydev.com/2009/01/03/taking-wpf-screenshots/'Surface' 카테고리의 다른 글
[surface] 코드로 만든 Fade out Control (1) | 2012.05.04 |
---|---|
[surface] ContentControl에서 ContentPresenter의 활용 (0) | 2012.04.27 |
[surface] Media.Brush를 Media.Color로 Convert 하는 법 (0) | 2012.04.25 |
[surface] generic.xaml의 x:Name을 잡아내서 Control안에서 조정하기 (0) | 2012.04.25 |
[surface] Control만들때 OnApplyTemplate()이 호출되지 않을때 (0) | 2012.04.25 |