Zrzut (ekranu) strony www o dowolnym rozmiarze (C#)

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.

|

Kometarze (1) »

  1. Kamil:

    26 Sep 2012 @ 12:49

    czy mógłbym prosić o gotowca do uruchomienia pod windowsem lub linuxem? nie będę owijał – nie umiem skorzystać z tego kodu a bardzo potrzebowałbym móc zrobić zrzut z map googla w dobrej rozdzielczości – zrzut z ekranu daje zbyt małą rozdzielczość przy wydruku.

    jak by się dało to poproszę link albo podam maila.

    dzięki i pozdrawiam.

RSS komentarzy · adres TrackBack

Odpowiedz