2017-05-05 59 views
0

我試圖通過RenderTargetBitmap類捕獲主窗口wpf應用程序到png圖像。除了圖像在底部和左側有一個小的透明區域外,它工作得很好。這是代碼和拍攝的圖像: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包括邊框和標題欄的大小。

來代替窗口,你應該呈現它的頂級子元素,即其Content

var contentElement = (FrameworkElement)Content; 

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

renderTargetBitmap.Render(contentElement); 
+0

謝謝@Clemens,它工作得很好 – Jacky

相關問題