将WebBrowser.Document转换为位图?

soo*_*ise 15 c# browser drawtobitmap

是否可以将WebBrowser.Document绘制到位图?基本上是获取WebBrowser控件的屏幕截图(注意,这是一个WebBrowser,它不存在于表单上,而只存在于代码中).

WebBrowser w = new WebBrowser();
w.Document = "<b>Hello</b> world.";
w.Document.DrawToBitmap ???
Run Code Online (Sandbox Code Playgroud)

谢谢!

小智 24

我使用以下代码捕获WebBrowser控件中加载的网页的屏幕截图:

class NativeMethods
{
    [ComImport]
    [Guid("0000010D-0000-0000-C000-000000000046")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    interface IViewObject
    {
        void Draw([MarshalAs(UnmanagedType.U4)] uint dwAspect, int lindex, IntPtr pvAspect, [In] IntPtr ptd, IntPtr hdcTargetDev, IntPtr hdcDraw, [MarshalAs(UnmanagedType.Struct)] ref RECT lprcBounds, [In] IntPtr lprcWBounds, IntPtr pfnContinue, [MarshalAs(UnmanagedType.U4)] uint dwContinue);
    }

    [StructLayout(LayoutKind.Sequential, Pack = 4)]
    struct RECT
    {
        public int Left;
        public int Top;
        public int Right;
        public int Bottom;
    }

    public static void GetImage(object obj, Image destination, Color backgroundColor)
    {
        using(Graphics graphics = Graphics.FromImage(destination))
        {
            IntPtr deviceContextHandle = IntPtr.Zero;
            RECT rectangle = new RECT();

            rectangle.Right = destination.Width;
            rectangle.Bottom = destination.Height;

            graphics.Clear(backgroundColor);

            try
            {
                deviceContextHandle = graphics.GetHdc();

                IViewObject viewObject = obj as IViewObject;
                viewObject.Draw(1, -1, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, deviceContextHandle, ref rectangle, IntPtr.Zero, IntPtr.Zero, 0);
            }
            finally
            {
                if(deviceContextHandle != IntPtr.Zero)
                {
                    graphics.ReleaseHdc(deviceContextHandle);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

例:

Bitmap screenshot = new Bitmap(1024, 768);
NativeMethods.GetImage(webBrowser.ActiveXInstance, screenshot, Color.White);
Run Code Online (Sandbox Code Playgroud)

  • 答案非常简单 - 使用WebBrowser类的Width/Height方法调整webbrowser的大小.感谢webspy这段漂亮的代码. (2认同)

Dav*_*ras 1

http://www.bryancook.net/2006/03/screen-capture-for-invisible-windows.html

和这里:

http://www.codeproject.com/KB/graphics/screen_capturing.aspx

我相信您应该获取 WebBrowser 控件的句柄并将其内容保存为图像,如这些链接中建议的那样。