Como obter uma captura de tela de um controle WinForms programação?
Pergunta
Como você programaticamente obter uma imagem de um controle .net?
Solução
Há um método em cada controle chamado DrawToBitmap . Você não precisa p / invoke para fazer isso.
Control c = new TextBox();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(c.Width, c.Height);
c.DrawToBitmap(bmp, c.ClientRectangle);
Outras dicas
Você pode obter uma imagem de um controle .NET programaticamente muito facilmente usando o DrawToBitmap método da classe de controle a partir de .NET 2.0
Aqui está um exemplo em VB
Dim formImage As New Bitmap("C:\File.bmp")
Me.DrawToBitmap(formImage, Me.Bounds)
E aqui está em C #:
Bitmap formImage = New Bitmap("C:\File.bmp")
this.DrawToBitmap(formImage, this.Bounds)
Control.DrawToBitmap vai deixar você chamar a maioria dos controles para um bitmap. Isso não funciona com RichTextBox e alguns outros.
Se você deseja capturar estes, ou um controle que tem um deles, então você precisa fazer PInvoke como descrito neste artigo CodeProject: Captura de imagem
Tome cuidado para que alguns desses métodos irá capturar tudo o que está na tela, então se você tem uma outra janela cobrindo seu controle você terá que, em vez.
Para controles WinForms que apoiá-lo, há um método na classe System.Windows.Forms.Control:
public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);
Esta não funciona com todos os controles, no entanto. Terceiros fornecedores de componentes têm soluções mais abrangentes.
Esta é a forma de fazê-lo por um Form
inteiro, não apenas a área de cliente (que não tem a barra de título e outras preparações)
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);
Se não é sobre o controle que você está tentando fazer, normalmente você pode lançá-lo para a base Control classe e chamar o método DrawToBitmap lá.
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: Sua multa trabalhando