zoukankan      html  css  js  c++  java
  • CEF截图

    记录目前两种实现方式

    [DllImport("user32.dll")]
            private static extern bool PrintWindow(IntPtr hwnd, IntPtr hdcBlt, uint nFlags);
    
            public void WriteBmp(string bmpPath)
            {
    
                int screenWidth = webbrowser.Document.Body.ScrollRectangle.Width;
                int screenHeight = webbrowser.Document.Body.ScrollRectangle.Height;
    
                IntPtr myIntptr = webbrowser.Handle;
                int hwndInt = myIntptr.ToInt32();
                IntPtr hwnd = myIntptr;
    
                // Set hdc to the bitmap
    
                Bitmap bm = new Bitmap(screenWidth, screenHeight);
                Graphics g = Graphics.FromImage(bm);
                IntPtr hdc = g.GetHdc();
    
                // Snapshot the WebBrowser
    
                bool result = PrintWindow(hwnd, hdc, 0);
                g.ReleaseHdc(hdc);
                g.Flush();
    
                // Save the bitmap, if successful
    
                if (result == true)
                    bm.Save(bmpPath);
            }

    第二种

    public static class ApiConstants
        {
            public const int SRCCOPY = 13369376;
        }
    
        public static class Utilities
        {
            public static Image CaptureScreen()
            {
                return CaptureWindow(User32.GetDesktopWindow());
            }
    
            public static Image CaptureWindow(IntPtr handle)
            {
    
                IntPtr hdcSrc = User32.GetWindowDC(handle);
    
                RECT windowRect = new RECT();
                User32.GetWindowRect(handle, ref windowRect);
    
                int width = windowRect.right - windowRect.left;
                int height = windowRect.bottom - windowRect.top;
    
                IntPtr hdcDest = Gdi32.CreateCompatibleDC(hdcSrc);
                IntPtr hBitmap = Gdi32.CreateCompatibleBitmap(hdcSrc, width, height);
    
                IntPtr hOld = Gdi32.SelectObject(hdcDest, hBitmap);
                Gdi32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, ApiConstants.SRCCOPY);
                Gdi32.SelectObject(hdcDest, hOld);
                Gdi32.DeleteDC(hdcDest);
                User32.ReleaseDC(handle, hdcSrc);
    
                Image image = Image.FromHbitmap(hBitmap);
                Gdi32.DeleteObject(hBitmap);
    
                return image;
            }
        }
    
        public static class User32
        {
            [DllImport("user32.dll")]
            public static extern IntPtr GetDesktopWindow();
            [DllImport("user32.dll")]
            public static extern IntPtr GetWindowDC(IntPtr hWnd);
            [DllImport("user32.dll")]
            public static extern IntPtr GetWindowRect(IntPtr hWnd, ref RECT rect);
            [DllImport("user32.dll")]
            public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC);
        }
    
        public class Gdi32
        {
            [DllImport("gdi32.dll")]
            public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hObjectSource, int nXSrc, int nYSrc, int dwRop);
            [DllImport("gdi32.dll")]
            public static extern IntPtr CreateCompatibleBitmap(IntPtr hDC, int nWidth, int nHeight);
            [DllImport("gdi32.dll")]
            public static extern IntPtr CreateCompatibleDC(IntPtr hDC);
            [DllImport("gdi32.dll")]
            public static extern bool DeleteDC(IntPtr hDC);
            [DllImport("gdi32.dll")]
            public static extern bool DeleteObject(IntPtr hObject);
            [DllImport("gdi32.dll")]
            public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
        }
    
        [StructLayout(LayoutKind.Sequential)]
        public struct RECT
        {
            public int left;
            public int top;
            public int right;
            public int bottom;
        }
    }

    引用https://www.cnblogs.com/jackhuclan/archive/2012/04/23/1909301.html

    新增

    第三种,使用前端库截图, 这里截图直接是指定元素的全图,包括滚动条不可见部分,避免了使用windows句柄截图只能截取可视区域。

    dom-to-image

    添加引用

    <script src="dom-to-image/dom-to-image.js"></script>

    添加截图方法

    function shotScreenAsync() {
      return new Promise((resolve, rejece) => {
        var appElement = document.getElementById('app');
        domtoimage.toPng(appElement, {
          bgcolor: "#ffffff",
          style: {
            overflow: ""
          }
        }).then(data => {
          resolve(data);
        }).catch(error => {
            rejece(error)
          });
      })
    }
  • 相关阅读:
    PAT (Advanced Level) 1086. Tree Traversals Again (25)
    PAT (Advanced Level) 1085. Perfect Sequence (25)
    PAT (Advanced Level) 1084. Broken Keyboard (20)
    PAT (Advanced Level) 1083. List Grades (25)
    PAT (Advanced Level) 1082. Read Number in Chinese (25)
    HDU 4513 吉哥系列故事――完美队形II
    POJ Oulipo KMP 模板题
    POJ 3376 Finding Palindromes
    扩展KMP
    HDU 2289 Cup
  • 原文地址:https://www.cnblogs.com/guanglin/p/12168254.html
Copyright © 2011-2022 走看看