2008-11-05 13 views
32

¿Cómo se obtiene programáticamente una imagen de un control .Net?¿Cómo obtener una captura de pantalla de un control .Net WinForms programáticamente?

+0

Esto es un poco demasiado vago, intenta explicar qué estás tratando de hacer. No vagar por los votos hacia abajo. –

+1

¿No deambula? Creo que el significado es perfectamente claro. Quiere obtener una representación de mapa de bits de un control. – Will

+3

Estoy de acuerdo con Will. Es una pregunta simple y clara. – Bogdan

Respuesta

48

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

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

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds); 

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

7

Usted puede obtener una imagen de un control mediante programación .NET con bastante facilidad utilizando el DrawToBitmap método de la clase control de arranque en .NET 2.0

Este es un ejemplo en VB

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

Y aquí es en C#:

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

si no es en la co ntrol que estás tratando de hacer, generalmente puedes lanzarlo a la clase base Control y llamar al método DrawToBitmap allí.

5

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 tiene uno de ellos, entonces necesita hacer PInvoke como se describe en el artículo de 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á.

+0

Para WebBrowser, simplemente lanzo a Control y lo llamo allí. Lo hice y sé que funciona. No estoy seguro acerca de RichTextBox – Nick

1
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: Su funcionamiento muy bien

2

Ésta es la forma en que lo haga por toda una Form, no sólo el área de cliente (que no tiene la barra de título y otra vestidor)

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