Pergunta

Como você programaticamente obter uma imagem de um controle .net?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top