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.vnScreenshot:
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ố ImageFormat
dà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);
}
}