¿Cómo obtener una captura de pantalla de un control .Net WinForms mediante programación?

StackOverflow https://stackoverflow.com/questions/266116

Pregunta

¿Cómo obtiene programáticamente una imagen de un control .Net?

¿Fue útil?

Solución

Hay un método en cada control llamado DrawToBitmap . No necesita p / invocar para hacer esto.

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

Otros consejos

Puede obtener una imagen de un control .NET mediante programación con bastante facilidad utilizando el método DrawToBitmap de la clase Control que comienza en .NET 2.0

Aquí hay una muestra en VB

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

Y aquí está en C #:

 Bitmap formImage = New Bitmap("C:\File.bmp")
 this.DrawToBitmap(formImage, this.Bounds)

Control.DrawToBitmap le permitirá dibujar la mayoría de los controles en un mapa de bits. Esto no funciona con RichTextBox y algunos otros.

Si desea capturar estos, o un control que tenga uno de ellos, debe hacer PInvoke como se describe en este artículo de CodeProject: Captura de imagen

Tenga cuidado de que algunos de estos métodos capturen lo que esté en la pantalla, por lo que si tiene otra ventana que cubra su control, lo obtendrá en su lugar.

Para los controles WinForms que lo admiten, hay un método en la clase System.Windows.Forms.Control:

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);

Sin embargo, esto no funciona con todos los controles. Los proveedores de componentes de terceros tienen soluciones más completas.

Esta es la forma de hacerlo para un Formulario completo, no solo para el área del Cliente (que no tiene la barra de título y otros apósitos)

        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 no está en el control que está tratando de hacer, generalmente puede enviarlo a la clase de Control base y llamar al método DrawToBitmap allí.

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

Nota: funciona bien

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top