2017-05-05 3 views
0

J'ai essayé de capturer l'application wpf de la fenêtre principale à l'image png par la classe RenderTargetBitmap. Cela fonctionne bien sauf que l'image a une petite zone transparente en bas et à gauche. Ce code et est capturé l'image:A une zone transparente inattendue dans l'image que RenderTargetBitmap a capturé le contrôle 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

Répondre

0

Une fenêtre de ActualWidth et ActualHeight inclut la taille de la barre de bordure et le titre.

au lieu de la fenêtre, vous devez rendre son élément supérieur de l'enfant de niveau, à savoir son Content:

var contentElement = (FrameworkElement)Content; 

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

renderTargetBitmap.Render(contentElement); 
+0

@Clemens __gVirt_NP_NN_NNPS<__ Merci, bien travailler – Jacky