Question

Comment obtenir par programme une image d’un contrôle .Net?

Était-ce utile?

La solution

Sur chaque contrôle, il existe une méthode appelée DrawToBitmap . Vous n'avez pas besoin de p / invoke pour le faire.

Control c = new TextBox();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(c.Width, c.Height);
c.DrawToBitmap(bmp, c.ClientRectangle);

Autres conseils

Vous pouvez facilement visualiser une image d'un contrôle .NET par programme à l'aide de la méthode DrawToBitmap de la classe Control démarrant dans .NET 2.0

.

Voici un exemple en 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)

Control.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 capturer ceux-ci ou un contrôle qui en possède un, vous devez utiliser PInvoke comme décrit dans cet article de CodeProject: Capture d'image

Veillez à ce que certaines de ces méthodes capturent tout ce qui est affiché à l'écran. Par conséquent, si vous avez une autre fenêtre couvrant votre contrôle, vous l'obtiendrez à la place.

Pour les contrôles WinForm qui le prennent en charge, il existe une méthode dans la classe System.Windows.Forms.Control:

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);

Toutefois, cela ne fonctionne pas avec toutes les commandes. Les fournisseurs de composants tiers disposent de solutions plus complètes.

Voici comment procéder pour un formulaire entier, pas seulement la zone client (sans barre de titre ni autre habillage)

        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);

si ce n'est pas sur le contrôle que vous essayez de faire, vous pouvez généralement le transtyper vers la classe Control de base et appeler la méthode DrawToBitmap à cet endroit.

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 fonctionnement est optimal

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top