Jak zrobić Screen capture z a.Net WinForms steruje programowo?

Jak programowo uzyskać obraz kontrolki. Net?

Author: Alex Wiese, 2008-11-05

7 answers

Istnieje metoda na każdej kontroli o nazwie DrawToBitmap . Nie musisz tego robić.

Control c = new TextBox();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(c.Width, c.Height);
c.DrawToBitmap(bmp, c.ClientRectangle);
 48
Author: Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-05 18:27:34

Można uzyskać obraz sterowania. NET programowo dość łatwo za pomocą DrawToBitmap metoda klasy kontrolnej zaczynającej się w. NET 2.0

Oto próbka w VB

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

A tu jest w C#:

 Bitmap formImage = New Bitmap("C:\File.bmp")
 this.DrawToBitmap(formImage, this.Bounds)
 7
Author: Joey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-09 09:56:13

Kontrola.DrawToBitmap pozwoli Ci narysować większość kontrolek na bitmapie. To nie działa z RichTextBox i niektórych innych. Jeśli chcesz je przechwycić, lub kontrolkę, która ma jedną z nich, musisz wykonać PInvoke, jak opisano w artykule code project http://www.codeproject.com/KB/graphics/imagecapture.aspx , zasugerowane przez Jeffa. Uważaj, aby niektóre z tych metod przechwyciły to, co jest na ekranie, więc jeśli masz inne okno zakrywające twoją kontrolę, otrzymasz to zamiast tego.

 5
Author: Hallgrim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-05 20:45:02

Dla kontrolek WinForms, które ją obsługują, istnieje metoda w systemie.Okna.Formularze.Klasa kontroli:

public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);

Nie działa to jednak ze wszystkimi kontrolkami. Zewnętrzni dostawcy komponentów mają bardziej kompleksowe rozwiązania.

 3
Author: Alan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-05 18:28:09

Oto Jak to zrobić dla całego Form, a nie tylko dla obszaru klienta (który nie ma paska tytułu i innych ubrań)

        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);
 2
Author: Mark Lakata,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-06 23:25:39

Jeśli nie znajduje się na kontrolce, którą próbujesz wykonać, zwykle możesz rzucić ją do podstawowej klasy kontrolnej i wywołać tam metodę DrawToBitmap.

 1
Author: Nick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-05 18:36:28
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

Uwaga: jego praca w porządku

 1
Author: R Muruganandhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-09 21:40:01