Is it possible to get a screenshot of a control in winforms without actually displaying it on the screen? How about a webBrowser component?
Asked
Active
Viewed 4,219 times
7
-
I have to ask - it's an interesting question, but in why would you ever need to do this? I'm genuinely curious, not making fun of the question.... – David Jan 12 '11 at 21:40
-
i need to be able send screenshot of graphical control meters whenever certain criteria is met.. – user441660 Jan 12 '11 at 22:05
-
showing these controls for several objects just to take a snapshot might not be a good idea.. it would be nice if i can place them on a user-control, take the snapshot of it in the background and send it as an image.. – user441660 Jan 12 '11 at 22:27
1 Answers
14
Yes. This can be done.
I whipped up a sample program to do it. Forgive my naming conventions and code organization, this was whipped up very quickly. You can modify it to better fit your needs, but this shows the basics.
I have a single form with three controls:
- button1: Button with the default settings.
- button2: Button with the Visible property set to false and the Text set to "button2 - not visible"
- webBrowser1: WebBrowser control with the visibility set to false, set the size to 250, 101 (just so it fits on my form. The size is relevant when you look at the capture at the bottom of my answer. You'll need to size it accordingly.)
here's the code in Form1:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
PrintInvisibleControl(button2, @"C:\button.jpg");
PrintInvisibleControl(webBrowser1, @"C:\webbrowser.jpg");
}
private void PrintInvisibleControl(Control myControl, string filename)
{
Graphics g = myControl.CreateGraphics();
//new bitmap object to save the image
Bitmap bmp = new Bitmap(myControl.Width, myControl.Height);
//Drawing control to the bitmap
myControl.DrawToBitmap(bmp, new Rectangle(0, 0, myControl.Width, myControl.Height));
bmp.Save(filename, ImageFormat.Jpeg);
bmp.Dispose();
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://www.microsoft.com");
}
}
}
This resulted in the following captures:

David
- 72,686
- 18
- 132
- 173
-
6Something is not clear to me. How is `Graphics g = myControl.CreateGraphics();` used ? – beppe9000 Dec 05 '14 at 22:56