2010-09-30 10 views
1

J'ai attrapé un code à partir du lien ci-dessous pour générer une capture d'écran d'un contrôle de navigateur Web: http://pietschsoft.com/post/2008/07/C-Generate-WebPage-Thumbmail-Screenshot-Image.aspxGénérer Screenshot De WebBrowser contrôle

Puis, je l'ai modifié pour être une méthode d'extension comme ceci:

public static Bitmap GetScreenshot(this WebBrowser webBrowser) 
     { 
      // Load the webpage into a WebBrowser control 
      using (WebBrowser wb = new WebBrowser()) 
      { 
       wb.ScrollBarsEnabled = false; 
       wb.ScriptErrorsSuppressed = true; 
       wb.Navigate(webBrowser.Url); 
       while (wb.ReadyState != WebBrowserReadyState.Complete) 
       { 
        Application.DoEvents(); 
       } 

       // Set the size of the WebBrowser control 
       wb.Width = wb.Document.Body.ScrollRectangle.Width; 
       wb.Height = wb.Document.Body.ScrollRectangle.Height; 

       // Get a Bitmap representation of the webpage as it's rendered in the WebBrowser control 
       Bitmap bitmap = new Bitmap(wb.Width, wb.Height); 
       wb.DrawToBitmap(bitmap, new Rectangle(0, 0, wb.Width, wb.Height)); 

       return bitmap; 
      } 
     } 

Cela fonctionne très bien pour la plupart des pages Web, mais j'essaie de l'utiliser pour un site SharePoint et l'image sort à 250x250 à chaque fois. : -s

Des génies ici qui peuvent me donner une solution?

Merci à l'avance

Répondre

0

Eh bien, la raison semble être que mon nouveau navigateur Web (wb) est non initialisée, même après que j'appelle Naviguer(). La propriété Url s'affiche comme nulle. C'est bizarre. Cela signifie-t-il que je ne peux pas créer un WebBrowser en code et que je ne l'affiche jamais? Ce serait dommage d'avoir à afficher la chose. :-(

+0

Bon tant pis que la théorie ... Je suis d'être épais ... il était nul parce DocumentCompleted n'a pas encore été appelée en tout cas, il me reste le problème et aussi la plupart du temps obtenir une image blanche vide tout le temps aussi bien. – Matt

0

D'une part, la classe DrawToBitmap n'existe pas sous le contrôle WebBrowser. Je suggère d'utiliser CopyFromScreen . Voici un extrait de code.

Bitmap b = new Bitmap(wb.ClientSize.Width, webBrowser1.ClientSize.Height); 
    Graphics g = Graphics.FromImage(b); 
    g.CopyFromScreen(this.PointToScreen(wb.Location), new Point(0, 0), wb.ClientSize); 
    //The bitmap is ready. Do whatever you please with it! 
    b.Save(@"c:\screenshot.jpg", ImageFormat.Jpeg); 
    MessageBox.Show("Screen Shot Saved!"); 
Questions connexes