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)
          });
      })
    }
  • 相关阅读:
    【BZOJ1135】[POI2009]Lyz
    【BZOJ5110】[CodePlus2017]Yazid 的新生舞会
    「BZOJ2882」工艺
    【BZOJ3626】[LNOI2014]LCA
    [Wc]Dface双面棋盘()
    【BZOJ3307】雨天的尾巴
    [NOI2012]骑行川藏
    【BZOJ4919】[Lydsy六月月赛]大根堆
    bzoj4184
    3237: [Ahoi2013]连通图 线段树分治
  • 原文地址:https://www.cnblogs.com/guanglin/p/12168254.html
Copyright © 2011-2022 走看看