c# - capturar - captura de pantalla csharp
¿Cómo obtener una captura de pantalla de un control.Net WinForms programáticamente? (7)
Control.DrawToBitmap te 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 tiene uno de ellos, entonces necesita hacer PInvoke como se describe en el artículo del proyecto de código http://www.codeproject.com/KB/graphics/imagecapture.aspx , sugerido por Jeff . Tenga cuidado de que algunos de estos métodos capturen lo que esté en la pantalla, de modo que si tiene otra ventana que cubra su control, lo obtendrá.
¿Cómo se obtiene programáticamente una imagen de un control .Net?
Esta es la forma de hacerlo para un Form
completo, no solo para el área del Cliente (que no tiene la barra de título y otros aderezos)
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);
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);
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.
Puede obtener una imagen de un control .NET programáticamente con bastante facilidad utilizando el método DrawToBitmap de la clase Control comenzando 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)
si no está en el control que estás tratando de hacer, generalmente puedes convertirlo a la clase base Control 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