• 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)
          });
      })
    }
  • 相关阅读:
    笔记12:maven项目管理工具
    笔记11:Oracle基础
    笔记10:springMVC
    笔记9:spring
    笔记8:mybatis
    Bad Sequence
    Optimal Currency Exchange
    Two Small Strings
    Equalizing by Division (easy version)&&(hard version)
    Codeforce 1096:D. Easy Problem(DP,思维)
  • 原文地址:https://www.cnblogs.com/guanglin/p/12168254.html
Copyright © 2020-2023  润新知