Source code chương trình chụp ảnh toàn bộ trang Web (Webpage capture)

3

c2.png

 Source code chương trình chụp ảnh toàn bộ trang Web

Sử dụng một WebBrowser control để nạp trang web, bạn có thể chụp được ảnh màn hình dựa vào kích thước của tài liệu trong WebBrowser thông qua phương thức Graphics.CopyFromScreen(). Tuy nhiên, WebBrowser đã hỗ trợ sẵn phương thức DrawToBitmap() giúp bạn làm việc này.

Download demo + sourcecode (16KB)
Pass giải nén: hoidapit.com.vn

Screenshot:


Phương pháp chụp hình trang web này dựa vào việc tạo một WebBrowser và phóng to cửa sổ để hiển thị toàn bộ trang web. Sau đó ta sẽ dùng phương thức DrawToBitmap() để lưu ảnh vào một Bitmap.
Để đảm bảo việc chụp ảnh trang web chỉ diễn ra một lần, ta cần làm công việc này trong sự kiện WebBrowser.DocumentCompleted, và sử dụng thêm property WebBrowser.ReadyStateđể kiểm tra việc nạp xong trang web.

Chụp ảnh

Phương thức CaptureWebPage() sau cung cấp thêm việc hiển thị tiến trình làm việc của WebBrowser thông qua một progressBar1:
void CaptureWebPage(string url)
{
    Cursor.Current=Cursors.WaitCursor;
    progressBar1.Show();
    if (_browser == null) {
        _browser = new WebBrowser();
        _browser.ProgressChanged += (sender,e) =>
        {
             progressBar1.Value = (int)(((double)e.CurrentProgress / e.MaximumProgress)*100);
        };
 
        _browser.DocumentCompleted += (sender, e) =>
        {
            if (_browser.ReadyState == WebBrowserReadyState.Complete) {
 
                int width = _browser.Document.Body.ScrollRectangle.Width;
                int height =_browser.Document.Body.ScrollRectangle.Height;
 
                _bitmap = new Bitmap(width,height);
 
                _browser.Size = _bitmap.Size;
                _browser.DrawToBitmap(_bitmap,_browser.Bounds);
                _browser.Stop();
 
                pictureBox1.Image = _bitmap;
                pictureBox1.Size = _bitmap.Size;
 
                lblImageSize.Text= String.Format("{0} x {1} pixels",_bitmap.Width,_bitmap.Height);
 
                progressBar1.Hide();
            }
        };
    }
    _browser.Navigate(url);
}

Thay đổi kích thước ảnh

Vì việc resize sẽ làm thay đổi ảnh nên cần sử dụng một đối tượng Bitmap (thành viên của lớp) để lưu lại ảnh ban đầu. Ví dụ sau sử dụng một NumericUpDown cho phép người dùng thay đổi kích thước theo phần trăm, từ đó tính ra kích thước mới (width x height):
void NumPercentValueChanged(object sender, EventArgs e)
{
    if(_bitmap==null)
        return;
    float percent=(float)(numPercent.Value/100);
    Bitmap bmp=new Bitmap((int)(_bitmap.Width*percent),(int)(_bitmap.Height*percent));
    lblImageSize.Text= String.Format("{0} x {1} pixels",bmp.Width,bmp.Height);
    Graphics g=Graphics.FromImage(bmp);
    g.DrawImage(_bitmap,0,0,bmp.Width,bmp.Height);
    pictureBox1.Image=bmp;
    pictureBox1.Size=bmp.Size;
}

Lưu ảnh

Sử dụng phương thức Image.Save(), phương thức này chấp nhận một tham số ImageFormatdành cho định dạng ảnh:
void BtnSaveClick(object sender, EventArgs e)
{
    if(saveFileDialog1.ShowDialog()==DialogResult.OK)
    {
        ImageFormat format;
        switch(saveFileDialog1.FilterIndex)
        {
            case 1:
                format=ImageFormat.Png;
                break;
            case 2:
                format=ImageFormat.Jpeg;
                break;
            default:
                format=ImageFormat.Bmp;
                break;
        }
        pictureBox1.Image.Save(saveFileDialog1.FileName,format);
    }
}
Ntech Developers

Programs must be written for people to read, and only incidentally for machines to execute.

Post a Comment

Previous Post Next Post