2009-08-17 7 views

Répondre

6

Vous pouvez utiliser RenderTargetBitmap pour générer une image à partir de votre contrôle WPF.

public const int IMAGE_DPI = 96; 

    public Image GenerateImage(T control) 
     where T : Control, new() 
    { 
     Size size = RetrieveDesiredSize(control); 

     Rect rect = new Rect(0, 0, size.Width, size.Height); 

     RenderTargetBitmap rtb = new RenderTargetBitmap((int)size.Width, (int)size.Height, IMAGE_DPI, IMAGE_DPI, PixelFormats.Pbgra32); 

     control.Arrange(rect); //Let the control arrange itself inside your Rectangle 
     rtb.Render(control); //Render the control on the RenderTargetBitmap 

     //Now encode and convert to a gdi+ Image object 
     PngBitmapEncoder png = new PngBitmapEncoder(); 
     png.Frames.Add(BitmapFrame.Create(rtb)); 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      png.Save(stream); 
      return Image.FromStream(stream); 
     } 
    } 

    private Size RetrieveDesiredSize(T control) 
    { 
     if (Equals(control.Width, double.NaN) || Equals(control.Height, double.NaN)) 
     { 
      //Make sure the control has measured first: 
      control.Measure(new Size(double.MaxValue, double.MaxValue)); 

      return control.DesiredSize; 
     } 

     return new Size(control.Width, control.Height); 
    } 

Notez que cela va générer une image PNG;) Si vous souhaitez l'enregistrer comme JPEG, je vous suggère d'utiliser un autre encodeur :)

Image image = GenerateImage(gridControl); 
image.Save("mygrid.png"); 
0

Je vais avoir le même problème, J'ai besoin de prendre des captures d'écran pour documenter mes tests mais je n'arrive pas à y arriver.

La fenêtre en question est une fenêtre modale sans bordure avec des coins arrondis/transparence permise. Voici mon rapport:

  • L'outil de capture d'écran de HP Quality Center ne le reconnaît pas comme une fenêtre et prend donc ses captures d'écran comme si la fenêtre n'existait pas.
  • SnagIt utilise un keycombo pour entrer dans le mode de capture. Une fois que le coup est frappé, le popup disparaît. Il réapparaît après la fin de la capture.
  • La capture Windows standard fonctionne correctement (Alt + Prt Scr) et capture la fenêtre telle qu'elle était destinée à être capturée.

Ensuite, j'ai essayé de capturer la fenêtre avec une liste déroulante ouverte. Aucune des approches mentionnées ci-dessus ne semble fonctionner (la dernière approche capture la Fenêtre de la même manière qu'avant, sans la liste déroulante ouverte).

Pour autant que je l'ai compris tous les discours correctement, la seule chose que vous pouvez faire est de mettre en œuvre ce dans les applications ...

1

Vous pouvez simplement appuyer sur le bouton PrtScr (Windows copie toute l'image descktop au tampon) , puis collez-le dans Power Point et recadrez-le si vous le souhaitez.

Questions connexes