2017-05-05 7 views
0

RenderTargetBitmap 클래스로 png 이미지로 주 윈도우 wpf 어플리케이션을 캡처하려고했습니다. 이미지가 아래쪽과 왼쪽에 작은 투명 영역을 가지고있는 것을 제외하면 잘 작동합니다.RenderTargetBitmap이 wpf 컨트롤을 캡쳐 한 이미지에서 예기치 않은 투명한 영역이 있습니다

private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
    { 
     string folder = "screenshot"; 
     if (!Directory.Exists(folder)) 
     { 
      Directory.CreateDirectory(folder); 
     } 

     string filename = "ScreenCapture_" + DateTime.Now.ToString("ddMM_hhmmss") + ".png"; 

     string filePath = folder + "//" + filename; 

     RenderTargetBitmap renderTargetBitmap = 
      new RenderTargetBitmap((int)this.ActualWidth, (int)this.ActualHeight, 96, 96, PixelFormats.Pbgra32); 
      renderTargetBitmap.Render(this); 
      PngBitmapEncoder pngImage = new PngBitmapEncoder(); 
      pngImage.Frames.Add(BitmapFrame.Create(renderTargetBitmap)); 
      using (Stream fileStream = File.Create(filePath)) 
      { 
       pngImage.Save(fileStream); 
      } 
    } 

Captured image has transparent part at bottom

답변

0

창의 ActualWidthActualHeight은 테두리와 제목 표시 줄의 크기를 포함 :이 코드와 캡처 이미지입니다.

var contentElement = (FrameworkElement)Content; 

var renderTargetBitmap = new RenderTargetBitmap(
    (int)contentElement.ActualWidth, (int)contentElement.ActualHeight, 
    96, 96, PixelFormats.Default); 

renderTargetBitmap.Render(contentElement); 
+0

감사 @Clemens, 그것은 잘 작동 : 대신 윈도우의

, 당신은 최고 수준의 자식 요소, 즉 그 Content 렌더링한다 – Jacky