2017-05-05 33 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

A Windowの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

関連する問題