Screen capture control using WebBrowser control and GDI+ in a web app

J

JP2006

I'm trying to write a control that will take a screen capture of a
particular website when a user submits a form in a web application; one
of the form fields is for a URL - the control needs to get an image of
that web site so that it can be displayed later as a thumbnail image.

I have code for taking a normal screen capture using GDI+ which works
fine. What I am now trying to do is to modify it so the screen capture
is of a remote website rather than of my PC. To attempt to do this I am
using the .NET WebBrowser control to load the website URL into.

The main bit of code is:


// The method that is called from the ASPX page when the form is
submitted
public static void newxcap2()
{
WebBrowser m_browser = new WebBrowser();
m_browser.Visible = false;
m_browser.DocumentCompleted += new
WebBrowserDocumentCompletedEventHandler(GetScreenCapture);
m_browser.Navigate(m_browser.Url = new
Uri("http://www.bbc.co.uk
}

public static void GetScreenCapture(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
Graphics _g = ((WebBrowser)sender).CreateGraphics();
System.IntPtr desktopDC = GetDC(System.IntPtr.Zero);
Image bm = new Bitmap(300, 300, _g);
Graphics g = Graphics.FromImage(bm);
System.IntPtr bmDC = g.GetHdc();
BitBlt(bmDC, 0, 0, bm.Width,bm.Height, desktopDC, 0, 0,
0x00CC0020 /*SRCCOPY*/);
ReleaseDC(System.IntPtr.Zero, desktopDC);
g.ReleaseHdc(bmDC);
g.Dispose();
bm.Save(@"C:\Documents and
Settings\JP\Desktop\xCapImage.bmp");
}

Having tinkered around with it quite a bit the most I can make it do is
to generate a blank image, other attempts have resulted in various
errors.

Am I on the right track in general here with the use of the WebBrowser
control (to in effect load a webpage behind the scenes) or am I
approaching this in the wrong way?
Thanks

James
 
R

Rick Strahl [MVP]

Uhm I'm surprised you're even getting that far. I suspect the Web Browser
requires a hosting container to work with a window. I don't think it will
render unless there's a Windows event loop to refresh the display area...
You can check and see if that's the issue by creating a form and then from
within ASP.NET fire that form with a full Application.Run event loop. That
*might* work better, but even then this might not work. Remember ASP.NET
runs as a service in a system context not on the desktop.

ASP.NET is not really a good way to do this.Aside from the security issues,
this seems like a task for a WinForm application...

+++ Rick ---
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,225
Members
46,815
Latest member
treekmostly22

Latest Threads

Top