成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

對指定的網頁進行截圖(C#版)

2010-08-28 10:52:01來源:西部e網作者:

碰到一個項目,需要對指定的網頁進行截圖保存,暈死!

需求永遠都是怪異的.....
解決是關鍵~

遂寫了以下代碼,快準狠!(因為趕時間!)
可以實現對指定的頁面獲取,按指定的大小生成縮略圖,當然也可以1:1的產生圖,
頁面上的javascript 運行對截圖貌似沒任何影響,相當的正常,我個人都覺得很神奇。

首先對項目添加系統引用
System.Drawing;
System.Drawing.Design;
System.Windows.Forms;

獲取指定網頁并轉換成圖片的類:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Windows.Forms;
using System.Diagnostics;

namespace MyLib
{
    
public class GetImage
    
{
        
private int S_Height;
        
private int S_Width;
        
private int F_Height;
        
private int F_Width;
        
private string MyURL;

        
public int ScreenHeight
        
{
            
get return S_Height; }
            
set { S_Height = value; }
        }


        
public int ScreenWidth
        
{
            
get return S_Width; }
            
set { S_Width = value; }
        }


        
public int ImageHeight
        
{
            
get return F_Height; }
            
set { F_Height = value; }
        }


        
public int ImageWidth
        
{
            
get return F_Width; }
            
set { F_Width = value; }
        }


        
public string WebSite
        
{
            
get return MyURL; }
            
set { MyURL = value; }
        }


        
public GetImage(string WebSite, int ScreenWidth, int ScreenHeight, int ImageWidth, int ImageHeight)
        
{
            
this.WebSite = WebSite;
            
this.ScreenWidth = ScreenWidth;
            
this.ScreenHeight = ScreenHeight;
            
this.ImageHeight = ImageHeight;
            
this.ImageWidth = ImageWidth;
        }


        
public Bitmap GetBitmap()
        
{
            WebPageBitmap Shot 
= new WebPageBitmap(this.WebSite, this.ScreenWidth, this.ScreenHeight);
            Shot.GetIt();
            Bitmap Pic 
= Shot.DrawBitmap(this.ImageHeight, this.ImageWidth);
            
return Pic;
        }

    }


    
class WebPageBitmap
    
{
        WebBrowser MyBrowser;
        
string URL;
        
int Height;
        
int Width;

        
public WebPageBitmap(string url, int width, int height)
        
{
            
this.Height = height;
            
this.Width = width;
            
this.URL = url;
            MyBrowser 
= new WebBrowser();
            MyBrowser.ScrollBarsEnabled 
= false;
            MyBrowser.Size 
= new Size(this.Width, this.Height);
        }


        
public void GetIt()
        
{
            MyBrowser.Navigate(
this.URL);
            
while (MyBrowser.ReadyState != WebBrowserReadyState.Complete)
            
{
                Application.DoEvents();
            }

        }


        
public Bitmap DrawBitmap(int theight, int twidth)
        
{
            Bitmap myBitmap 
= new Bitmap(Width, Height);
            Rectangle DrawRect 
= new Rectangle(00, Width, Height);
            MyBrowser.DrawToBitmap(myBitmap, DrawRect);
            System.Drawing.Image imgOutput 
= myBitmap;
            System.Drawing.Image oThumbNail 
= new Bitmap(twidth, theight, imgOutput.PixelFormat);
            Graphics g 
= Graphics.FromImage(oThumbNail);
            g.CompositingQuality 
= CompositingQuality.HighSpeed;
            g.SmoothingMode 
= SmoothingMode.HighSpeed;
            g.InterpolationMode 
= InterpolationMode.HighQualityBilinear;
            Rectangle oRectangle 
= new Rectangle(00, twidth, theight);
            g.DrawImage(imgOutput, oRectangle);
            
try
            
{

                
return (Bitmap)oThumbNail;
            }

            
catch (Exception ex)
            
{
                
return null;
            }

            
finally
            
{
                imgOutput.Dispose();
                imgOutput 
= null;
                MyBrowser.Dispose();
                MyBrowser 
= null;
            }

        }

    }


}



以下是調用方法,懶省事的方法,嘿嘿,趕時間就不說什么了,反正上面的抓取轉換類已經寫出來了,大家盡情的用異步,線程等方法自己玩吧!~

\
    
string UrlPath;
    
bool CaptureState = false;
    Guid guid;
    
protected bool SaveOriginalPageToImage(Guid myGuid)
    
{
//使用guid 來命名
        guid = myGuid;
        
if (this.CurrentPageAct == PageAct.Edit)
        
{
            
string PagePath = Request.Url.LocalPath;
            PagePath 
= PagePath.Replace("Operation""Capture");

            UrlPath 
= PagePath + "?act=view&ProjectNo=" + _projectNo;

            Thread NewTh 
= new Thread(CaptureImage);
            NewTh.SetApartmentState(ApartmentState.STA);
            NewTh.Start();
            
while (NewTh.ThreadState == ThreadState.Running)
            
{
            }

            
//返回截取狀態
            return CaptureState;
        }

        
return false;
    }


      
/// <summary>
    
/// 捕獲屏幕
    
/// </summary>
    
/// <param name="UrlPath"></param>
    
/// <returns></returns>

    public void CaptureImage()
    
{
        
try
        
{
            
string url = "http://" + Request.Url.Host + ":" + Request.Url.Port.ToString();
            url 
= url + UrlPath;

            GetImage thumb 
= new GetImage(url, 1024120010241200);
            System.Drawing.Bitmap x 
= thumb.GetBitmap();
            
string FileName = DateTime.Now.ToString("yyyyMMddhhmmss");

            x.Save(Server.MapPath(
"~/Capture/SavePage"+ "\\" + guid + ".jpg");
            CaptureState 
= true;
        }

        
catch (Exception ex)
        
{
            CaptureState 
= false;
        }

    }
關鍵詞:C#

贊助商鏈接:

主站蜘蛛池模板: 慈溪市| 七台河市| 新源县| 攀枝花市| 中牟县| 剑河县| 探索| 五家渠市| 濮阳市| 东宁县| 新绛县| 巴楚县| 高陵县| 德格县| 虎林市| 凤冈县| 通化县| 永康市| 绵阳市| 岳普湖县| 清河县| 巨鹿县| 白城市| 阿拉善右旗| 潞城市| 深泽县| 盐城市| 尚义县| 辽阳市| 泸水县| 昭觉县| 闻喜县| 确山县| 响水县| 县级市| 丹江口市| 大石桥市| 新丰县| 五家渠市| 喀喇沁旗| 筠连县|