2010-04-05 37 views
8

Tôi có chuỗi có URL. Ví dụ: "http://google.com".Làm cho trang web thành hình ảnh

Có cách nào để tải xuống và hiển thị trang này vào tệp hình ảnh không? ("test.jpg")

Tôi đã cố gắng sử dụng điều khiển WebBrowser, để tải xuống và hiển thị hình ảnh, nhưng nó chỉ hoạt động khi WebBrowser được đặt trong biểu mẫu được hiển thị. Nói cách khác, nó chỉ hiển thị hình chữ nhật màu đen.

Nhưng tôi muốn làm cho hình ảnh mà không cần bất kỳ hiệu ứng hình ảnh (tạo, kích hoạt hình thức, vv)

Trả lời

9

Internet Explorer hỗ trợ giao diện IHtmlElementRenderer, có sẵn để làm cho một trang để một bối cảnh thiết bị tùy ý. Đây là một mẫu biểu mẫu cho bạn thấy cách sử dụng nó. Bắt đầu với dự án + Add Reference, chọn Microsoft.mshtml

using System; 
using System.ComponentModel; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

namespace WindowsFormsApplication1 { 
    public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     webBrowser1.Url = new Uri("http://stackoverflow.com"); 
     webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; 
    } 

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { 
     if (!e.Url.Equals(webBrowser1.Url)) return; 
     // Get the renderer for the document body 
     mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument; 
     mshtml.IHTMLElement body = (mshtml.IHTMLElement)doc.body; 
     IHTMLElementRender render = (IHTMLElementRender)body; 
     // Render to bitmap 
     using (Bitmap bmp = new Bitmap(webBrowser1.ClientSize.Width, webBrowser1.ClientSize.Height)) { 
     using (Graphics gr = Graphics.FromImage(bmp)) { 
      IntPtr hdc = gr.GetHdc(); 
      render.DrawToDC(hdc); 
      gr.ReleaseHdc(); 
     } 
     bmp.Save("test.png"); 
     System.Diagnostics.Process.Start("test.png"); 
     } 
    } 

    // Replacement for mshtml imported interface, Tlbimp.exe generates wrong signatures 
    [ComImport, InterfaceType((short)1), Guid("3050F669-98B5-11CF-BB82-00AA00BDCE0B")] 
    private interface IHTMLElementRender { 
     void DrawToDC(IntPtr hdc); 
     void SetDocumentPrinter(string bstrPrinterName, IntPtr hdc); 
    } 
    } 
} 
+0

này có thể được sử dụng trong một environement phi thị giác, cho Ví dụ, trong một dịch vụ trên một máy chủ cửa sổ để thu nhỏ các trang html? –

+0

Tôi không thấy lý do tại sao không, bạn không cần phải đặt một WebBrowser trên một biểu mẫu để làm cho nó có thể sử dụng được. –

+0

Tuy nhiên, WebBrowser yêu cầu một chuỗi STA và một vòng lặp tin nhắn. Bạn sẽ phải tạo một ứng dụng với Application.Run(). –

Các vấn đề liên quan