Как вы программно получаете изображение элемента управления .Net?
Как получить программный захват элемента управления .Net WinForms?
Ответ 1
Там есть метод для каждого элемента управления, называемый DrawToBitmap. Для этого вам не нужно p/invoke.
Control c = new TextBox();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(c.Width, c.Height);
c.DrawToBitmap(bmp, c.ClientRectangle);
Ответ 2
Вы можете легко получить изображение элемента управления .NET с помощью метода DrawToBitmap класса Control, начиная с .NET 2.0
Вот пример в VB
Dim formImage As New Bitmap("C:\File.bmp")
Me.DrawToBitmap(formImage, Me.Bounds)
И вот он в С#:
Bitmap formImage = New Bitmap("C:\File.bmp")
this.DrawToBitmap(formImage, this.Bounds)
Ответ 3
Control.DrawToBitmap позволит вам привлечь большинство элементов управления к растровому изображению. Это не работает с RichTextBox и некоторыми другими. Если вы хотите их захватить или элемент управления, в котором есть один из них, тогда вам нужно выполнить PInvoke, как описано в статье проекта кода http://www.codeproject.com/KB/graphics/imagecapture.aspx, предложенный Джеффом. Позаботьтесь, чтобы некоторые из этих методов захватили все, что есть на экране, поэтому, если у вас есть другое окно, покрывающее ваш контроль, вы получите это вместо этого.
Ответ 4
Для поддерживающих его элементов управления WinForms существует метод в классе System.Windows.Forms.Control:
public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);
Однако это не работает со всеми элементами управления. Сторонние поставщики компонентов имеют более комплексные решения.
Ответ 5
Вот как это сделать для всего 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);
Ответ 6
Если он не находится в элементе управления, который вы пытаетесь сделать, вы можете просто применить его к базовому классу Control и вызвать метод DrawToBitmap.
Ответ 7
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
Примечание: Работает отлично