以编程方式截取网页

如果输入URL,如何以编程方式拍摄网页的情景?

这就是我现在所拥有的:

// The size of the browser window when we want to take the screenshot (and the size of the resulting bitmap) Bitmap bitmap = new Bitmap(1024, 768); Rectangle bitmapRect = new Rectangle(0, 0, 1024, 768); // This is a method of the WebBrowser control, and the most important part webBrowser1.DrawToBitmap(bitmap, bitmapRect); // Generate a thumbnail of the screenshot (optional) System.Drawing.Image origImage = bitmap; System.Drawing.Image origThumbnail = new Bitmap(120, 90, origImage.PixelFormat); Graphics oGraphic = Graphics.FromImage(origThumbnail); oGraphic.CompositingQuality = CompositingQuality.HighQuality; oGraphic.SmoothingMode = SmoothingMode.HighQuality; oGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic; Rectangle oRectangle = new Rectangle(0, 0, 120, 90); oGraphic.DrawImage(origImage, oRectangle); // Save the file in PNG format origThumbnail.Save(@"d:\Screenshot.png", ImageFormat.Png); origImage.Dispose(); 

但这不起作用。 它只给我一张白色的空白图片。 我在这里想念的是什么?

有没有其他方法可以编程方式获取网页的屏幕截图?

我搜索并搜索并搜索了网页缩略图 ( The Code Project文章)。

将浏览器控件绘制到位图有点不可靠。 我认为只是屏幕刮擦你的窗户会更好。

 using (Bitmap bitmap = new Bitmap(bitmapSize.Width, bitmapSize.Height, PixelFormat.Format24bppRgb)) using (Graphics graphics = Graphics.FromImage(bitmap)) { graphics.CopyFromScreen( PointToScreen(webBrowser1.Location), new Point(0, 0), bitmapSize); bitmap.Save(filename); } 

您可以尝试调用本机PrintWindow函数。

您也可以尝试从gdi32.dll P / Invoking BitBlt() 。 试试这段代码:

 Graphics mygraphics = webBrowser1.CreateGraphics(); Size s = new Size(1024, 768); Bitmap memoryImage = new Bitmap(s.Width, s.Height, mygraphics); Graphics memoryGraphics = Graphics.FromImage(memoryImage); IntPtr dc1 = mygraphics.GetHdc(); IntPtr dc2 = memoryGraphics.GetHdc(); // P/Invoke call here BitBlt(dc2, 0, 0, webBrowser1.ClientRectangle.Width, webBrowser1.ClientRectangle.Height, dc1, 0, 0, 13369376); mygraphics.ReleaseHdc(dc1); memoryGraphics.ReleaseHdc(dc2); memoryImage.Save(filename); 

P / Invoke将是:

 [DllImport("gdi32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool BitBlt(IntPtr hdc, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);