C#及wpf WebBrowser截图

来源:互联网 发布:手机个人理财软件 编辑:程序博客网 时间:2024/06/05 03:43

最靠谱的截图源码,直接拿去用,返回的ImageSource可以直接设置给Image控件

using System;using System.Collections.Generic;using System.Drawing;using System.IO;using System.Linq;using System.Runtime.InteropServices;using System.Text;using System.Windows.Media;namespace Base{    class WebScreenshot    {        [DllImport("user32.dll")]        private static extern bool PrintWindow(IntPtr hwnd, IntPtr hdcBlt, uint nFlags);        /// <summary>        /// 对一个WebBrowser进行截图        /// </summary>        /// <param name="targetBrowser">我这里用的是Forms的WebBrowser,如果是wpf的,请自己改成Controls并调整参数</param>        /// <returns></returns>        public static ImageSource BrowserSnapShot(System.Windows.Forms.WebBrowser targetBrowser)        {            // 获取宽高            int screenWidth = (int)targetBrowser.Width;            int screenHeight = (int)targetBrowser.Height;            IntPtr myIntptr = targetBrowser.Handle;            int hwndInt = myIntptr.ToInt32();            IntPtr hwnd = myIntptr;            //创建图形            System.Drawing.Bitmap bm = new System.Drawing.Bitmap(screenWidth, screenHeight, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);            System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bm);            IntPtr hdc = g.GetHdc();            //调用api 把hwnd的内容用图形绘制到hdc 如果你有代码洁癖 可以不使用api 使用g.CopyFromScreen,请自行研究            bool result = PrintWindow(hwnd, hdc, 0);            g.ReleaseHdc(hdc);            g.Flush();            if (result == true) //成功 转换并返回ImageSource            {                ImageSourceConverter imageSourceConverter = new ImageSourceConverter();                MemoryStream stream = new MemoryStream();                bm.Save(stream, System.Drawing.Imaging.ImageFormat.Png);                return (ImageSource)imageSourceConverter.ConvertFrom(stream);            }            return null;        }    }}
0 0
原创粉丝点击