0

Web ページ全体を画像として保存することに関して問題に直面しています。Web アプリケーションがあり、使用されるすべてのコントロールは「ユーザー コントロール」です。アプリケーションに 1 つのページがあり、それを使用して Web ページの画像を取得し、ソリューション内の 1 つのフォルダーに保存します。画像を取得しましたが、画像の高さが正しくありません。つまり、受け取ったページの高さが正しくありません。デバッグすると、ページの高さとして 0px が表示されます。

私のコードは次のとおりです。

    protected void GetThumbnailWorker()
    {
        using (WebBrowser browser = new WebBrowser())
        {
            //browser.ClientSize = new Size(_width, _height);
            //browser.ClientSize = new Size(960,2000);
            browser.ScrollBarsEnabled = false;
            browser.ScriptErrorsSuppressed = true;
            browser.Navigate(_url); 


        // Wait for control to load page
        while (browser.ReadyState != WebBrowserReadyState.Complete)
            Application.DoEvents();

        // Render browser content to bitmap
        int imgaewidth = 0;
        int imageheight=0;
        imgaewidth=browser.Document.Body.ScrollRectangle.Width;
        imageheight=browser.Document.Body.ScrollRectangle.Height;


        if (imageheight <100)
        {
            imageheight = 1500;
        }
        if (imgaewidth == 0)
        {
            imgaewidth = 964;
        }
         browser.ClientSize = new Size(imgaewidth, imageheight);
        _bmp = new Bitmap(imgaewidth, imageheight);
         browser.DrawToBitmap(_bmp, new Rectangle(0, 0,
         imgaewidth, imageheight));

    }
}

この問題のため、画像の高さを 1500 に設定しました。

誰でも私を助けることができますか?

コードの更新:

public static Bitmap GetThumbnail(string url, int width, int height,
  int thumbWidth, int thumbHeight)
{
    WebsiteThumbnail thumbnail = new WebsiteThumbnail(url, width, height,
      thumbWidth, thumbHeight);
    return thumbnail.GetThumbnail();
}

/// <summary>
/// Protected constructor
/// </summary>
protected WebsiteThumbnail(string url, int width, int height,
  int thumbWidth, int thumbHeight)
{
    _url = url;
    _width = width;
    _height = height;
    _thumbWidth = thumbWidth;
    _thumbHeight = thumbHeight;
}

/// <summary>
/// Returns a thumbnail for the current member values
/// </summary>
/// <returns>Thumbnail bitmap</returns>
protected Bitmap GetThumbnail()
{
    // WebBrowser is an ActiveX control that must be run in a
    // single-threaded apartment so create a thread to create the
    // control and generate the thumbnail
    Thread thread = new Thread(new ThreadStart(GetThumbnailWorker));
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    thread.Join();
    return _bmp.GetThumbnailImage(_thumbWidth, _thumbHeight,
      null, IntPtr.Zero) as Bitmap;
}
4

0 に答える 0