Por si alguien necesita una funcionalidad parecida a lo que ofrecen sitios como WebSnapr o Snap, a continuación pongo la manera de capturar una página web como imagen.
using (WebBrowser navegador = new WebBrowser())
{
// Tamaño del navegador
navegador.Size = new Size(1024, 768);
// Deshabilitar la barra de scroll
navegador.ScrollBarsEnabled = false;
// Cargar la página
navegador.Navigate(url);
// Esperar a que cargue completamente la página
while (navegador.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
// Tamaño de la imagen a capturar
Rectangle tamaño = new Rectangle(0, 0, 1024, 768);
Bitmap bitmap = new Bitmap(tamaño.Width, tamaño.Height);
// Guardar la imagen de la página con el tamaño especificado
navegador.DrawToBitmap(bitmap, tamaño);
// Convertir y guardar la imagen como jpg
Bitmap thumbnail = new Bitmap(tamaño.Width, tamaño.Height);
Graphics gfx = Graphics.FromImage(thumbnail);
gfx.DrawImage(bitmap, tamaño, tamaño, GraphicsUnit.Pixel);
thumbnail.Save(@"E:\demos\demo.jpg", ImageFormat.Jpeg);
}
Esa porción de código hace una captura de 1024x728 pixeles, si se quiere capturar la página completa sólo es necesario jugar con los valores de navegador.Document.Body.ClientRectangle
.
Por otro lado, como seguramente saben la clase WebControl usa internamente los controles de Internet Explorer disponibles en la máquina donde se ejecuta la aplicación, así que si un sitio se ve mal con este navegador, la imagen capturada también tendrá este pequeño problema.