生成された HTML の画像をキャプチャする必要があります。ここから Alex Filipovici の優れたソリューションを使用しています: Convert HTML string to image。Javascriptを使用してロードするiframeを持つページをロードしようとしている場合を除いて、うまく機能します。
静的 int 幅 = 1024;
静的 int 高さ = 768;
public static void Capture()
{
var html = @"
<!DOCTYPE html>
<meta http-equiv='X-UA-Compatible' content='IE=Edge'>
<html>
<iframe id='forecast_embed' type='text/html' frameborder='0' height='245' width='100%' src='http://forecast.io/embed/#lat=42.3583&lon=- 71.0603&name=ボストンのダウンタウン'> </iframe>
</html>
";
StartBrowser(html);
}
private static void StartBrowser(文字列ソース)
{
var th = 新しいスレッド(() =>
{
var webBrowser = new WebBrowser();
webBrowser.Width = 幅;
webBrowser.Height = 高さ;
webBrowser.ScrollBarsEnabled = false;
webBrowser.DocumentCompleted += webBrowser_DocumentCompleted;
webBrowser.DocumentText = ソース;
Application.Run();
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
}
static void webBrowser_DocumentCompleted(オブジェクト送信者, WebBrowserDocumentCompletedEventArgs e)
{
var webBrowser = (WebBrowser)送信者;
using (Bitmap bitmap = new Bitmap(幅, 高さ))
{
webBrowser.DrawToBitmap(ビットマップ、新しい System.Drawing.Rectangle(0, 0, 幅, 高さ));
bitmap.Save(@"image.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
Application.Exit();
}
すべての JavaScript が終了したかどうか、iframe の読み込みの気まぐれと、DocumentCompleted get がフレーム/iframe + 1 の数だけ呼び出されるという事実を知る決定的な方法はおそらくないことを理解しています。iframe の読み込みをカウンターで処理できます。または何か、しかし私が望むのは合理的な遅延だけなので、javascriptがロードされ、次のように「ロード中」の画像が表示されません: http://imgur.com/FiFMTmm