2017-05-05 4 views
0

Ich habe versucht, Hauptfenster WPF-Anwendung zu png Bild von RenderTargetBitmap-Klasse erfassen. Es funktioniert gut, außer das Bild hat eine kleine transparente Fläche an der Unterseite und der linken Seite. Dies ist Code und erfasste Bild:Hat einen unerwarteten transparenten Bereich im Bild, dass RenderTargetBitmap WPF-Steuerelement erfasst

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

Antwort

0

Ein Fenster des ActualWidth und ActualHeight umfasst die Größe des Rahmens und Titelleiste.

Anstelle des Fensters, sollten Sie seine Top-Level-Kind-Element übertragen, das heißt seine Content:

var contentElement = (FrameworkElement)Content; 

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

renderTargetBitmap.Render(contentElement); 
+0

Thank @Clemens, es funktioniert gut – Jacky

Verwandte Themen