首页 > 代码库 > C#Winfrom将浏览器生成Image

C#Winfrom将浏览器生成Image

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Imaging; using System.Runtime.InteropServices; using System.Security;namespace Print{    public class Test    {        public static Bitmap GetHtmlImage(Uri UrlString, int Width)        {            WebBrowser MyControl = new WebBrowser();            MyControl.Size = new Size(Width, 10);            MyControl.Url = UrlString;            while (MyControl.ReadyState != WebBrowserReadyState.Complete)            {                Application.DoEvents();            }            MyControl.Height = MyControl.Document.Body.ScrollRectangle.Height + 20;            MyControl.Url = UrlString;            WebControlImage.Snapshot snap = new WebControlImage.Snapshot();            Bitmap MyImage = snap.TakeSnapshot(MyControl.ActiveXInstance, new Rectangle(0, 0, MyControl.Width, MyControl.Height));            MyControl.Dispose();            return MyImage;        }        ///         /// WebBrowser获取图形         ///         private class WebControlImage        {            internal static class NativeMethods            {                [StructLayout(LayoutKind.Sequential)]                public sealed class tagDVTARGETDEVICE                {                    [MarshalAs(UnmanagedType.U4)]                    public int tdSize;                    [MarshalAs(UnmanagedType.U2)]                    public short tdDriverNameOffset;                    [MarshalAs(UnmanagedType.U2)]                    public short tdDeviceNameOffset;                    [MarshalAs(UnmanagedType.U2)]                    public short tdPortNameOffset;                    [MarshalAs(UnmanagedType.U2)]                    public short tdExtDevmodeOffset;                }                [StructLayout(LayoutKind.Sequential)]                public class COMRECT                {                    public int left;                    public int top;                    public int right;                    public int bottom;                    public COMRECT()                    {                    }                    public COMRECT(Rectangle r)                    {                        this.left = r.X;                        this.top = r.Y;                        this.right = r.Right;                        this.bottom = r.Bottom;                    }                    public COMRECT(int left, int top, int right, int bottom)                    {                        this.left = left;                        this.top = top;                        this.right = right;                        this.bottom = bottom;                    }                    public static NativeMethods.COMRECT FromXYWH(int x, int y, int width, int height)                    {                        return new NativeMethods.COMRECT(x, y, x + width, y + height);                    }                    public override string ToString()                    {                        return string.Concat(new object[] { "Left = ", this.left, " Top ", this.top, " Right = ", this.right, " Bottom = ", this.bottom });                    }                }                [StructLayout(LayoutKind.Sequential)]                public sealed class tagLOGPALETTE                {                    [MarshalAs(UnmanagedType.U2)]                    public short palVersion;                    [MarshalAs(UnmanagedType.U2)]                    public short palNumEntries;                }            }            public class Snapshot            {                ///                 /// ?煺?                 ///                 /// Com 对象                 /// 图象大小                 ///                 public Bitmap TakeSnapshot(object pUnknown, Rectangle bmpRect)                {                    if (pUnknown == null)                        return null;                    //必须为com对象                     if (!Marshal.IsComObject(pUnknown))                        return null;                    //IViewObject 接口                     UnsafeNativeMethods.IViewObject ViewObject = null;                    IntPtr pViewObject = IntPtr.Zero;                    //内存图                     Bitmap pPicture = new Bitmap(bmpRect.Width, bmpRect.Height);                    Graphics hDrawDC = Graphics.FromImage(pPicture);                    //获取接口                     object hret = Marshal.QueryInterface(Marshal.GetIUnknownForObject(pUnknown),                    ref UnsafeNativeMethods.IID_IViewObject, out pViewObject);                    try                    {                        ViewObject = Marshal.GetTypedObjectForIUnknown(pViewObject, typeof(UnsafeNativeMethods.IViewObject)) as UnsafeNativeMethods.IViewObject;                        //调用Draw方法                         ViewObject.Draw((int)System.Runtime.InteropServices.ComTypes.DVASPECT.DVASPECT_CONTENT,                        -1,                        IntPtr.Zero,                        null,                        IntPtr.Zero,                        hDrawDC.GetHdc(),                        new NativeMethods.COMRECT(bmpRect),                        null,                        IntPtr.Zero,                        0);                    }                    catch (Exception ex)                    {                        Console.WriteLine(ex.Message);                        throw ex;                    }                    //释放                     hDrawDC.Dispose();                    return pPicture;                }            }            [SuppressUnmanagedCodeSecurity]            internal static class UnsafeNativeMethods            {                public static Guid IID_IViewObject = new Guid("{0000010d-0000-0000-C000-000000000046}");                [ComImport, Guid("0000010d-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]                public interface IViewObject                {                    [PreserveSig]                    int Draw([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [In] NativeMethods.tagDVTARGETDEVICE ptd, IntPtr hdcTargetDev, IntPtr hdcDraw, [In] NativeMethods.COMRECT lprcBounds, [In] NativeMethods.COMRECT lprcWBounds, IntPtr pfnContinue, [In] int dwContinue);                    [PreserveSig]                    int GetColorSet([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [In] NativeMethods.tagDVTARGETDEVICE ptd, IntPtr hicTargetDev, [Out] NativeMethods.tagLOGPALETTE ppColorSet);                    [PreserveSig]                    int Freeze([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [Out] IntPtr pdwFreeze);                    [PreserveSig]                    int Unfreeze([In, MarshalAs(UnmanagedType.U4)] int dwFreeze);                    void SetAdvise([In, MarshalAs(UnmanagedType.U4)] int aspects, [In, MarshalAs(UnmanagedType.U4)] int advf, [In, MarshalAs(UnmanagedType.Interface)] System.Runtime.InteropServices.ComTypes.IAdviseSink pAdvSink);                    void GetAdvise([In, Out, MarshalAs(UnmanagedType.LPArray)] int[] paspects, [In, Out, MarshalAs(UnmanagedType.LPArray)] int[] advf, [In, Out, MarshalAs(UnmanagedType.LPArray)] System.Runtime.InteropServices.ComTypes.IAdviseSink[] pAdvSink);                }            }        }    }}
将html生成图片的类
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Drawing.Imaging;namespace Excel文件处理{    public partial class Html : Form    {        public Html()        {            InitializeComponent();        }        private string ImageUrl = "";//图片地址        private string ImageName = "";//图片名称        private void button1_Click(object sender, EventArgs e)        {            string HtmlUrl = this.Txt_Url.Text.Trim();             if (HtmlUrl=="")            {                MessageBox.Show("请输入网址");                return;            }             if (ImageUrl.Trim()=="")            {                 ImageUrl = @"C:\Users\Administrator\Desktop";               }            try            {                Uri ri = new Uri(this.Txt_Url.Text);                Bitmap bit = Print.Test.GetHtmlImage(ri, 1200);                ImageName = this.Txt_Name.Text.Trim();//图片名称                if (ImageName != "")                {                    if (ImageName.IndexOf(.) != -1)                    {//当用户输入图片后缀时,将后缀截取                        ImageName.Substring(0, ImageName.LastIndexOf(.));                    }                }                else                    ImageName = DateTime.Now.Ticks.ToString();//时间名称                switch (this.comboBox1.SelectedText)                {                    case "GIF": ImageUrl += "\\" + ImageName + ".gif"; break;                    case "JPG": ImageUrl += "\\" + ImageName + ".jpg"; break;                    case "PNG": ImageUrl += "\\" + ImageName + ".png"; break;                    default: ImageUrl += "\\" + ImageName + ".png"; break;                }                switch (this.comboBox1.SelectedText)                {                    case "GIF": bit.Save(ImageUrl, ImageFormat.Gif); break;                    case "JPG": bit.Save(ImageUrl, ImageFormat.Jpeg); break;                    case "PNG": bit.Save(ImageUrl, ImageFormat.Png); break;                    default: bit.Save(ImageUrl, ImageFormat.Png); break;                }                bit = null;                ImageUrl = "";//图片地址                ImageName = "";//图片名称                MessageBox.Show("生产成功");            }            catch            {                MessageBox.Show("网址输入有误!");                return;            }                   }        private void button2_Click(object sender, EventArgs e)        {             //获取保存路径            if (this.folderBrowserDialog1.ShowDialog()==DialogResult.OK)            {                if (this.folderBrowserDialog1.SelectedPath.Trim()!="")                {                    ImageUrl = folderBrowserDialog1.SelectedPath;                    this.label6.Text = ImageUrl;                }            }                    }    }}
winfrom后台处理方面

C#Winfrom将浏览器生成Image