如何生成网页的略缩图?

1. 关键代码:

using  System;
using  System.Drawing;
using  System.Windows.Forms;
using  System.Threading;
using  System.IO;
using  System.Reflection;

namespace  WebsiteThumbnail
{
    
public   class  WebsiteThumbnailImageGenerator
    {
        
public   static  Bitmap GetWebSiteThumbnail( string  Url,  int  BrowserWidth,  int  BrowserHeight,  int  ThumbnailWidth,  int  ThumbnailHeight)
        {
            WebsiteThumbnailImage thumbnailGenerator 
=   new  WebsiteThumbnailImage(Url, BrowserWidth, BrowserHeight, ThumbnailWidth, ThumbnailHeight);
            
return  thumbnailGenerator.GenerateWebSiteThumbnailImage();
        }

        
private   class  WebsiteThumbnailImage
        {
            
public  WebsiteThumbnailImage( string  Url,  int  BrowserWidth,  int  BrowserHeight,  int  ThumbnailWidth,  int  ThumbnailHeight)
            {
                
this .m_Url  =  Url;
                
this .m_BrowserWidth  =  BrowserWidth;
                
this .m_BrowserHeight  =  BrowserHeight;
                
this .m_ThumbnailHeight  =  ThumbnailHeight;
                
this .m_ThumbnailWidth  =  ThumbnailWidth;
            }
                                    
            
private   string  m_Url  =   null ;
            
public   string  Url
            {
                
get
                {
                    
return  m_Url;
                }
                
set
                {
                    m_Url 
=  value;
                }
            }

            
private  Bitmap m_Bitmap  =   null ;
            
public  Bitmap ThumbnailImage
            {
                
get
                {
                    
return  m_Bitmap;
                }
            }

            
private   int  m_ThumbnailWidth;
            
public   int  ThumbnailWidth
            {
                
get
                {
                    
return  m_ThumbnailWidth;
                }
                
set
                {
                    m_ThumbnailWidth 
=  value;
                }
            }

            
private   int  m_ThumbnailHeight;
            
public   int  ThumbnailHeight
            {
                
get
                {
                    
return  m_ThumbnailHeight;
                }
                
set
                {
                    m_ThumbnailHeight 
=  value;
                }
            }

            
private   int  m_BrowserWidth;
            
public   int  BrowserWidth
            {
                
get
                {
                    
return  m_BrowserWidth;
                }
                
set
                {
                    m_BrowserWidth 
=  value;
                }
            }

            
private   int  m_BrowserHeight;
            
public   int  BrowserHeight
            {
                
get
                {
                    
return  m_BrowserHeight;
                }
                
set
                {
                    m_BrowserHeight 
=  value;
                }
            }

            
public  Bitmap GenerateWebSiteThumbnailImage()
            {
                Thread m_thread 
=   new  Thread( new  ThreadStart(_GenerateWebSiteThumbnailImage));
                m_thread.SetApartmentState(ApartmentState.STA);
                m_thread.Start();
                m_thread.Join();
                
return  m_Bitmap;
            }

            
private   void  _GenerateWebSiteThumbnailImage()
            {
                WebBrowser m_WebBrowser 
=   new  WebBrowser();
                m_WebBrowser.ScrollBarsEnabled 
=   false ;
                m_WebBrowser.Navigate(m_Url);
                m_WebBrowser.DocumentCompleted 
+=   new  WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
                
while  (m_WebBrowser.ReadyState  !=  WebBrowserReadyState.Complete)
                    Application.DoEvents();
                m_WebBrowser.Dispose();
            }

            
private   void  WebBrowser_DocumentCompleted( object  sender, WebBrowserDocumentCompletedEventArgs e)
            {
                WebBrowser m_WebBrowser 
=  (WebBrowser)sender;
                m_WebBrowser.ClientSize 
=   new  Size( this .m_BrowserWidth,  this .m_BrowserHeight);
                m_WebBrowser.ScrollBarsEnabled 
=   false ;
                m_Bitmap 
=   new  Bitmap(m_WebBrowser.Bounds.Width, m_WebBrowser.Bounds.Height);
                m_WebBrowser.BringToFront();
                m_WebBrowser.DrawToBitmap(m_Bitmap, m_WebBrowser.Bounds);
                m_Bitmap 
=  (Bitmap)m_Bitmap.GetThumbnailImage(m_ThumbnailWidth, m_ThumbnailHeight,  null , IntPtr.Zero);                
            }
        }
    }
}

At any rate, the trick is to use the Windows Forms Webbrowser control. Contrary to what you may or may not have heard, this does not have to be situated on a container form - it can be used independently with 100% programmatic access. There are a couple of catches: First, being a Windows Form control, this must operate on an STA (Single Threaded Apartment) thread. This means you need to either set the "AspCompat = "true" attribute on the page that uses it, or you need to make the actual Webbrowser Navigate call to the target page on a secondary thread whose state has been set to STA. I chose the latter. The other gotcha is that the Webbrowser control does its navigation on more than one thread. The DocumentCompleted event handler is fired when the browser has fully loaded the target url, and therefore it is in this event that we want to do our business logic.

2. 示例程序下载

下载

转载于:https://www.cnblogs.com/xuqiang/archive/2011/02/03/1953310.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值