Comment obtenir une capture d'écran de a.Net WinForms contrôle par programmation?

Comment obtenez-vous par programmation une image d'un contrôle. Net?

32
demandé sur Alex Wiese 2008-11-05 21:20:10

7 réponses

Il existe une méthode sur chaque contrôle appelée DrawToBitmap . Vous n'avez pas besoin de P/invoquer pour le faire.

Control c = new TextBox();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(c.Width, c.Height);
c.DrawToBitmap(bmp, c.ClientRectangle);
48
répondu Will 2008-11-05 18:27:34

Vous pouvez obtenir une image d'un contrôle. net par programmation assez facilement en utilisant le DrawToBitmap méthode de la classe de contrôle à partir de. net 2.0

Voici un échantillon dans VB

    Dim formImage As New Bitmap("C:\File.bmp")
    Me.DrawToBitmap(formImage, Me.Bounds)

Et le voici en C#:

 Bitmap formImage = New Bitmap("C:\File.bmp")
 this.DrawToBitmap(formImage, this.Bounds)
7
répondu Joey 2012-08-09 09:56:13

Contrôle.DrawToBitmap vous permettra de dessiner la plupart des contrôles sur un bitmap. Cela ne fonctionne pas avec RichTextBox et quelques autres. Si vous voulez les capturer, ou un contrôle qui en a un, alors vous devez faire PInvoke comme décrit dans l'article du projet de code http://www.codeproject.com/KB/graphics/imagecapture.aspx , suggéré par Jeff. Veillez à ce que certaines de ces méthodes capturent tout ce qui est à l'écran, donc si vous avez une autre fenêtre couvrant votre contrôle, vous obtiendrez cela plutôt.

5
répondu Hallgrim 2008-11-05 20:45:02

Pour les contrôles WinForms qui le prennent en charge, il existe une méthode dans le système.Windows.Forme.Classe de contrôle:

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);

Cela ne fonctionne pas avec tous les contrôles, cependant. Les fournisseurs de composants tiers ont des solutions plus complètes.

3
répondu Alan 2008-11-05 18:28:09

Voici comment le faire pour un Form entier, pas seulement la zone Client (qui n'a pas la barre de titre et d'autres pansements)

        Rectangle r = this.Bounds;
        r.Offset(-r.X,-r.Y);
        Bitmap bitmap = new Bitmap(r.Width,r.Height);
        this.DrawToBitmap(bitmap, r);
        Clipboard.SetImage(bitmap);
2
répondu Mark Lakata 2013-05-06 23:25:39

Si ce n'est pas sur le contrôle que vous essayez de faire, vous pouvez généralement le convertir dans la classe de contrôle de base et y appeler la méthode DrawToBitmap.

1
répondu Nick 2008-11-05 18:36:28
Panel1.Dock = DockStyle.None ' If Panel Dockstyle is in Fill mode
Panel1.Width = 5000  ' Original Size without scrollbar
Panel1.Height = 5000 ' Original Size without scrollbar

Dim bmp As New Bitmap(Me.Panel1.Width, Me.Panel1.Height)
Me.Panel1.DrawToBitmap(bmp, New Rectangle(0, 0, Me.Panel1.Width, Me.Panel1.Height))
'Me.Panel1.DrawToBitmap(bmp, Panel1.ClientRectangle)
bmp.Save("C:\panel.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

Panel1.Dock = DockStyle.Fill

Remarque: Son travail de beaux -

1
répondu R Muruganandhan 2011-06-09 21:40:01