Mały i prosty kawałek przydatnego kodu w C# .net – może komuś się przyda. Za pomocą opisanego poniżej programu można zapisać zrzut dowolnej strony internetowej do pliku graficznego. Nie byłoby w tym nic nadzwyczajnego gdyby nie fakt, że program potrafi wygenerować zrzut o rozmiarze większym niż ekran – bez sztucznego przewijania strony.
Przykładowy zrzut tego bloga o rozmiarze 800 na 19560 pikseli można zobaczyć w pomniejszeniu (oryginał ma ponad 5 mega) tutaj.
Jak to działa? Kontrolka przeglądarki (czyli nasze “okno”) tworzona jest w tle, dzięki czemu może mieć dowolny rozmiar, wykraczający poza granice ekranu.
Jak wygląda aplikacja? Moja wygląda bardzo prosto, ponieważ zawiera wyłącznie minimum funkcji i możliwości. Pozwala na wybranie adresu strony, nazwy pliku do którego zapisujemy zrzut i rozmiaru zrzutu.

Przy tworzeniu programu potrzebujemy kontrolki webBrowser, którą należy umieścić na formie, ale poza widocznym obszarem. Dodatkowo wykorzystałem 3 pola tekstowe i guzik.
Kod programu z drobnym komentarzem jest następujący.
// Przepisujemy wartości z GUI do zmiennych:
int width = Int32.Parse(textBox2.Text);
int height = Int32.Parse(textBox3.Text);
string url = textBox1.Text;
string file = textBox4.Text;
// Konfigurujemy kontrolkę webBrowser
webBrowser1.ScrollBarsEnabled = false;
webBrowser1.Width = width;
webBrowser1.Height = height;
// Rozpoczynamy pobieranie strony (URL):
webBrowser1.Navigate(url);
// Czekamy, aż pobieranie się zakończy:
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
// Tworzymy zmienną na zrzut o odpowiednim rozmiarze:
Bitmap bitmap = new Bitmap(width, height);
Rectangle bitmapRect = new Rectangle(0, 0, width, height);
// Zapisujemy zrzut strony do utworzonej zmiennej
webBrowser1.DrawToBitmap(bitmap, bitmapRect);
// Konwertujemy zminną bitmapową do obrazka i zapisujemy w formacie PNG
System.Drawing.Image origImage = bitmap;
origImage.Save(file, ImageFormat.Png);;
Może się kiedyś komuś przyda. Zakładam, że mi się kiedyś przyda, więc napisałem ten wpis, żeby mi się rozwiązanie nie zgubiło.














