Grafika GDI+ w Visual Basic .NET
(Obrazy bohaterów/Getty Images)
GDI+ to sposób na rysowanie kształtów, czcionek, obrazów lub ogólnie czegokolwiek graficznego w Visual Basic .INTERNET.
Ten artykuł jest pierwszą częścią pełnego wprowadzenia do korzystania z GDI+ w Visual Basic .NET.
GDI+ to niezwykła część platformy .NET. Był tutaj przed .NET (GDI+ został wydany z Windows XP) i nie dzieli tych samych cykli aktualizacji co .NET Framework. Dokumentacja Microsoftu zwykle stwierdza, że Microsoft Windows GDI+ jest API dlaC/C++programistów do systemu operacyjnego Windows. Ale GDI+ Również zawiera przestrzenie nazw używane w VB.NET do programowania grafiki opartego na oprogramowaniu.
WPF
Ale to nie jest tylko oprogramowanie graficzne dostarczane przez Microsoft, zwłaszcza od Frameworka 3.0. Kiedy wprowadzono Vista i 3.0, wprowadzono z nim zupełnie nowy WPF. WPF to wysokopoziomowe, przyspieszane sprzętowo podejście do grafiki. Jak ujął to Tim Cahill, członek zespołu oprogramowania Microsoft WPF, za pomocą WPF „opisujesz swoją scenę za pomocą konstrukcji wysokiego poziomu, a my zajmiemy się resztą”. A fakt, że jest akcelerowany sprzętowo, oznacza, że nie musisz przeciągać w dół operacji procesora komputera, rysując kształty na ekranie. Większość prawdziwej pracy wykonuje twoja karta graficzna.
Byliśmy tu jednak już wcześniej. Każdemu „wielkiemu skokowi do przodu” zwykle towarzyszy kilka potknięć w tył, a poza tym WPF zajmie lata, aby przejść przez miliony bajtów kodu GDI+. Jest to szczególnie prawdziwe, ponieważ WPF prawie zakłada, że pracujesz z systemem o dużej mocy z dużą ilością pamięci i gorącą kartą graficzną. Dlatego wiele komputerów nie mogło uruchomić Vista (a przynajmniej użyć grafiki „Aero”) Vista, kiedy została ona wprowadzona. Tak więc ta seria jest nadal dostępna na stronie dla wszystkich, którzy nadal muszą z niej korzystać.
Stary dobry kod
GDI+ nie jest czymś, co można przeciągnąć do formularza, tak jak inne składniki w VB.NET. Zamiast tego, obiekty GDI+ zazwyczaj muszą być dodawane w stary sposób – przez kodowanie ich od podstaw! (Chociaż VB .NET zawiera wiele bardzo przydatnych fragmentów kodu, które naprawdę mogą ci pomóc).
Do kodowania GDI+ używa się obiektów i ich elementów członkowskich z wielu przestrzeni nazw platformy .NET. (W chwili obecnej są to właściwie tylko kody opakowujące dla obiektów systemu operacyjnego Windows, które faktycznie wykonują pracę).
Przestrzenie nazw
Przestrzenie nazw w GDI+ to:
System.Rysunek
To jest ten podstawowa przestrzeń nazw GDI+. Definiuje obiekty do podstawowego renderowania ( czcionki , długopisy, podstawowe pędzle itp.) oraz najważniejszy obiekt: Grafika. Zobaczymy więcej tego w zaledwie kilku akapitach.
Rysunek systemowy. Rysunek 2D
Daje to obiekty do bardziej zaawansowanej dwuwymiarowej grafiki wektorowej. Niektóre z nich to pędzle gradientowe, nasadki pióra i przekształcenia geometryczne.
System.Rysunek.Obrazowanie
Jeśli chcesz zmienić obrazy graficzne — to znaczy zmienić paletę, wyodrębnić metadane obrazu, manipulować metaplikami itd. — to jest to, czego potrzebujesz.
System.Rysunek.Drukowanie
Aby renderować obrazy na drukowanej stronie, wejdź w interakcję z samą drukarką i sformatuj ogólny wygląd zadania drukowania, użyj obiektów tutaj.
System.Rysunek.Tekst
W tej przestrzeni nazw możesz używać kolekcji czcionek.
Obiekt graficzny
Miejscem, od którego należy zacząć od GDI+, jest Grafika obiekt. Chociaż rzeczy, które rysujesz, pojawiają się na monitorze lub drukarce, obiekt Graphics jest „płótnem”, na którym rysujesz.
Ale obiekt Graphics jest również jednym z pierwszych źródeł nieporozumień podczas korzystania z GDI+. Obiekt Graphics jest zawsze powiązany z konkretnym kontekst urządzenia . Pierwszym problemem, z którym boryka się praktycznie każdy nowy student GDI+, jest: „Jak uzyskać obiekt graficzny?”.
Zasadniczo istnieją dwa sposoby:
- Możesz użyć oraz parametr zdarzenia, który jest przekazywany do OnPaint wydarzenie z PaintEventArgs obiekt. Kilka wydarzeń mija PaintEventArgs i możesz użyć , aby odwołać się do obiektu Graphics, który jest już używany przez kontekst urządzenia.
- Możesz użyć Tworzenie grafiki metoda kontekstu urządzenia w celu utworzenia obiektu Graphics.
Oto przykład pierwszej metody:
|_+_|Kliknij tutaj, aby wyświetlić ilustrację
Dodaj to do klasy Form1 dla standardowej aplikacji systemu Windows, aby samodzielnie ją zakodować.
W tym przykładzie obiekt Graphics jest już utworzony dla formularza Formularz 1 . Wszystko, co musisz zrobić, to utworzyć lokalną instancję tego obiektu i użyć jej do rysowania w tym samym formularzu. Zauważ, że twój kod Nadpisania ten OnPaint metoda. Dlatego MyBase.OnPaint(e) jest wykonywany na końcu. Musisz się upewnić, że jeśli obiekt bazowy (ten, który nadpisujesz) robi coś innego, ma szansę to zrobić. Często Twój kod działa bez tego, ale to dobry pomysł.
PaintEventArgs
Możesz również uzyskać obiekt graficzny, używając PaintEventArgs obiekt przekazany do twojego kodu w OnPaint oraz Metody OnPaintBackground formularzowy. The DrukujPageEventArgs przeszedł w Wydrukuj stronę zdarzenie będzie zawierać obiekt Graphics do drukowania. Możliwe jest nawet uzyskanie obiektu Graphics dla niektórych obrazów. Dzięki temu możesz malować bezpośrednio na obrazie w taki sam sposób, jak malujesz na formularzu lub komponencie.
Obsługa zdarzeń
Inną odmianą pierwszej metody jest dodanie obsługi zdarzeń dla Farba wydarzenie dla formularza. Oto jak wygląda ten kod:
|_+_|Tworzenie grafiki
Druga metoda uzyskania obiektu Graphics dla twojego kodu wykorzystuje a Tworzenie grafiki metoda dostępna z wieloma komponentami. Kod wygląda tak:
|_+_|Jest tu kilka różnic. To jest w Przycisk1.Kliknij wydarzenie, ponieważ kiedy Formularz 1 odmalowuje się w Obciążenie zdarzenie, nasza grafika ginie. Więc musimy je dodać w późniejszym wydarzeniu. Jeśli to zakodujesz, zauważysz, że grafika zostanie utracona, gdy Formularz 1 musi zostać przerysowany. (Zminimalizuj i ponownie maksymalizuj, aby to zobaczyć.) To duża zaleta korzystania z pierwszej metody.
Większość odniesień zaleca użycie pierwszej metody, ponieważ grafika zostanie automatycznie przemalowana. GDI+ może być trudne!