Как программно получить снимок экрана элемента управления .Net WinForms? - PullRequest
32 голосов
/ 05 ноября 2008

Как программно получить изображение элемента управления .Net?

Ответы [ 7 ]

49 голосов
/ 05 ноября 2008

В каждом элементе управления есть метод с именем DrawToBitmap . Вам не нужно p / invoke, чтобы сделать это.

Control c = new TextBox();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(c.Width, c.Height);
c.DrawToBitmap(bmp, c.ClientRectangle);
7 голосов
/ 05 ноября 2008

Вы можете программно получить изображение элемента управления .NET с помощью метода DrawToBitmap класса Control, начиная с .NET 2.0

Вот пример в VB

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

И вот оно в C #:

 Bitmap formImage = New Bitmap("C:\File.bmp")
 this.DrawToBitmap(formImage, this.Bounds)
5 голосов
/ 05 ноября 2008

Control.DrawToBitmap позволит вам нарисовать большинство элементов управления в растровом изображении. Это не работает с RichTextBox и некоторыми другими.

Если вы хотите захватить их или элемент управления, который имеет один из них, вам нужно выполнить PInvoke, как описано в этой статье CodeProject: Захват изображения

Позаботьтесь о том, чтобы некоторые из этих методов захватывали все, что находится на экране, поэтому, если у вас есть другое окно, охватывающее ваш элемент управления, вы получите это вместо этого.

3 голосов
/ 05 ноября 2008

Для элементов управления WinForms, которые его поддерживают, в классе System.Windows.Forms.Control есть метод:

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);

Однако это работает не со всеми элементами управления. Сторонние поставщики компонентов имеют более комплексные решения.

2 голосов
/ 07 мая 2013

Вот как это сделать для всего Form, а не только для клиентской области (в которой нет строки заголовка и других правок)

        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);
1 голос
/ 09 июня 2011
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

Примечание: Хорошо работает

1 голос
/ 05 ноября 2008

если он не находится в элементе управления, который вы пытаетесь сделать, вы обычно можете привести его к базовому классу Control и вызвать там метод DrawToBitmap.

...