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.