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;
}