How to get a screen capture of a .Net WinForms control programmatically?

前端 未结 7 2039
抹茶落季
抹茶落季 2020-12-13 09:30

How do you programmatically obtain a picture of a .Net control?

相关标签:
7条回答
  • 2020-12-13 09:50

    This is how to do it for an entire Form, not just the Client area (which doesn't have the title bar and other dressing)

            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);
    
    0 讨论(0)
  • 2020-12-13 09:51

    Control.DrawToBitmap will let you draw most controls to a bitmap. This does not work with RichTextBox and some others.

    If you want to capture these, or a control that has one of them, then you need to do PInvoke like described in this CodeProject article: Image Capture

    Take care that some of these methods will capture whatever is on the screen, so if you have another window covering your control you will get that instead.

    0 讨论(0)
  • 2020-12-13 09:53

    For WinForms controls that support it, there is a method in the System.Windows.Forms.Control class:

    public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);
    

    This does not work with all controls, however. Third party component vendors have more comprehensive solutions.

    0 讨论(0)
  • 2020-12-13 10:01

    if it's not on the control you're trying to do, you can usually cast it to the base Control class and call the DrawToBitmap method there.

    0 讨论(0)
  • 2020-12-13 10:06

    You can get a picture of a .NET control programmatically pretty easily using the DrawToBitmap method of the Control class starting in .NET 2.0

    Here is a sample in VB

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

    And here it is in C#:

     Bitmap formImage = New Bitmap("C:\File.bmp")
     this.DrawToBitmap(formImage, this.Bounds)
    
    0 讨论(0)
  • 2020-12-13 10:10
    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
    

    Note: Its working fine

    0 讨论(0)
提交回复
热议问题