国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

Winform實現(xiàn)將網(wǎng)頁生成圖片的方法

2020-01-24 02:23:29
字體:
供稿:網(wǎng)友

通常瀏覽器都有將網(wǎng)頁生成圖片的功能,本文實例講述了Winform實現(xiàn)將網(wǎng)頁生成圖片的方法。分享給大家供大家參考。具體方法如下:

工具截圖如下:

生成后的圖片如下:

手動填寫網(wǎng)站地址,可選擇圖片類型和保持圖片地址,來生成頁面的圖片,當圖片路徑未選擇時則保存桌面;

具體代碼如下:

將html生成圖片的類

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;          //內(nèi)存圖           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;            //調(diào)用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);        }      }    }  }}

winfrom后臺處理方面代碼如下

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("請輸入網(wǎng)址");        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 += "http://" + ImageName + ".gif"; break;          case "JPG": ImageUrl += "http://" + ImageName + ".jpg"; break;          case "PNG": ImageUrl += "http://" + ImageName + ".png"; break;          default: ImageUrl += "http://" + 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("生產(chǎn)成功");      }      catch      {        MessageBox.Show("網(wǎng)址輸入有誤!");        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;        }      }    }  }}

希望本文所述對大家的C#程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 古丈县| 芜湖县| 平安县| 平陆县| 灵山县| 托克逊县| 新营市| 墨玉县| 乐平市| 辽阳市| 长沙县| 彝良县| 重庆市| 温泉县| 托克逊县| 利辛县| 镇坪县| 伊川县| 黔东| 晋宁县| 三明市| 林甸县| 饶平县| 客服| 壤塘县| 平陆县| 新田县| 莲花县| 资阳市| 泉州市| 彩票| 古浪县| 喀喇沁旗| 棋牌| 长子县| 乌拉特前旗| 济宁市| 和静县| 汤原县| 金阳县| 鹤岗市|