Grafika GDI + v jazyce Visual Basic .NET Tutorial

GDI + je způsob, jak nakreslit tvary, písma, obrázky nebo obecně něco grafického Visual Basic .SÍŤ.

Tento článek je první částí úplného úvodu používání GDI + v jazyce Visual Basic .NET.

GDI + je neobvyklá součást .NET. Bylo to tady před .NET (GDI + byl propuštěn s Windows XP) a nesdílí stejné cykly aktualizace jako .NET Framework. Dokumentace společnosti Microsoft obvykle uvádí, že rozhraní Microsoft Windows GDI + je API C / C ++ programátory do operačního systému Windows. Ale GDI + taky zahrnuje namespaces používané ve VB.NET pro softwarové programování grafiky.

WPF

Ale to není pouze grafický software poskytovaný společností Microsoft, zejména od Framework 3.0. Když byly představeny systémy Vista a 3.0, byl představen zcela nový WPF. WPF je hardwarově akcelerovaný přístup k grafice. Jak říká Tim Cahill, člen týmu softwarového týmu Microsoft WPF, pomocí WPF „popíšete svou scénu pomocí konstruktů na vysoké úrovni a my se budeme starat o odpočinek. “A skutečnost, že se jedná o hardwarově akcelerovaný, znamená, že nemusíte přetahovat činnost počítačového procesoru nakreslením obrazců na obrazovka. Hodně ze skutečné práce se provádí vaší grafickou kartou.

instagram viewer

Byli jsme tu však už předtím. Každý „velký skok vpřed“ je obvykle doprovázen několika pády dozadu a kromě toho bude trvat roky, než WPF projde ziliony bajtů kódu GDI +. To platí zejména proto, že WPF jen předpokládá, že pracujete s vysoce výkonným systémem se spoustou paměti a horkou grafickou kartou. Proto mnoho počítačů nemohlo spustit systém Vista (nebo alespoň používat grafiku Vista „Aero“), když byl poprvé představen. Tato série je tedy nadále k dispozici na webu pro všechny a všechny, kteří ji nadále potřebují používat.

Dobrý kód Ol '

GDI + není něco, co můžete přetáhnout do formuláře jako ostatní komponenty ve VB.NET. Místo toho musí být objekty GDI + obecně přidány starým způsobem - jejich kódováním od nuly! (Přestože VB .NET obsahuje řadu velmi užitečných úryvků kódu, které vám mohou opravdu pomoci.)

K kódování GDI + používáte objekty a jejich členy z několika jmenných prostorů .NET. (V současné době se jedná pouze o kód wrapperu pro objekty Windows OS, které skutečně pracují.)

Jmenné prostory

Jmenné prostory v GDI + jsou:

Systém. Výkres

Tohle je základní jmenný prostor GDI +. Definuje objekty pro základní vykreslování (fonty, pera, základní štětce atd.) a nejdůležitější objekt: Grafika. Více toho uvidíme v několika odstavcích.

Systém. Výkres. Drawing2D

Tím získáte objekty pro pokročilejší dvourozměrnou vektorovou grafiku. Některé z nich jsou gradientní štětce, čepice pera a geometrické transformace.

Systém. Výkres. Zobrazování

Pokud chcete změnit grafické obrázky - tj. Změnit paletu, extrahovat metadata obrázku, manipulovat s metasoubory atd. - toto je ten, který potřebujete.

Systém. Výkres. Tisk

Chcete-li vykreslit obrázky na tištěnou stránku, pracovat se samotnou tiskárnou a formátovat celkový vzhled tiskové úlohy, použijte zde uvedené objekty.

Systém. Výkres. Text

S tímto oborem názvů můžete použít sbírky písem.

Grafický objekt

Místo, kde začít s GDI +, je Grafika objekt. Přestože se položky, které nakreslíte, zobrazují na monitoru nebo tiskárně, je grafický objekt „plátnem“, na který kreslíte.

Objekt Graphics je však také jedním z prvních zdrojů záměny při používání GDI +. Grafický objekt je vždy spojen s konkrétní kontext zařízení. Prvním problémem, kterému prakticky každý nový student GDI + čelí, je: „Jak získám grafický objekt?“

V zásadě existují dva způsoby:

  1. Můžete použít E parametr události, který je předán do OnPaint událost s PaintEventArgs objekt. Několik akcí projde PaintEventArgs a můžete použít k odkazu na grafický objekt, který je již používán v kontextu zařízení.
  2. Můžete použít CreateGraphics metoda pro kontext zařízení k vytvoření grafického objektu.

Zde je příklad první metody:

Chráněné potlačení Sub OnPaint (_. ByVal e As System. Okna. Formuláře. PaintEventArgs) Dim g As Graphics = e. Grafika. G. DrawString ("O jazyce Visual Basic" & vbCrLf _. & "a GDI +" & vbCrLf & "A Great Team", _. Nové písmo ("Times New Roman", 20), _. Štětce. Firebrick, 0, 0) MyBase. OnPaint (e) End Sub

Klepnutím sem zobrazíte obrázek

Přidejte to do třídy Form1 pro standardní aplikaci Windows a kódujte ji sami.

V tomto příkladu je již pro formulář vytvořen grafický objekt Form1. Vše, co musíte udělat, je vytvořit lokální instanci tohoto objektu a použít jej k tomu, abyste nakreslili stejný formulář. Všimněte si, že váš kód Přepíše OnPaint metoda. Proto MyBase. OnPaint (e) je proveden na konci. Musíte se ujistit, že pokud základní objekt (ten, který přepisujete) dělá něco jiného, ​​dostane šanci to udělat. Váš kód často funguje bez tohoto, ale je to dobrý nápad.

PaintEventArgs

Grafický objekt můžete také získat pomocí PaintEventArgs objekt předaný váš kód v OnPaint a Metody OnPaintBackground formuláře. PrintPageEventArgs prošel v PrintPage událost bude obsahovat grafický objekt pro tisk. Pro některé obrázky je dokonce možné získat grafický objekt. To vám umožní malovat přímo na obrázek stejným způsobem, jako byste malovali na formulář nebo komponentu.

Obsluha událostí

Další variantou metody je přidání obsluhy událostí pro Malovat událost pro formulář. Jak tento kód vypadá:

Private Sub Form1_Paint (_. Odesílatel ByVal jako objekt, _. ByVal e As System. Okna. Formuláře. PaintEventArgs) _. Zvládne mě. Malovat. Dim g As Graphics = e. Grafika. G. DrawString ("O jazyce Visual Basic" & vbCrLf _. & "a GDI +" & vbCrLf & "A Great Team", _. Nové písmo ("Times New Roman", 20), _. Štětce. Firebrick, 0, 0) End Sub

CreateGraphics

Druhá metoda získání grafického objektu pro váš kód používá CreateGraphics metoda, která je k dispozici s mnoha komponenty. Kód vypadá takto:

Private Sub Button1_Click (_. Odesílatel ByVal jako systém. Objekt, _. ByVal e As System. EventArgs) _. Kliky Button1.Click. Dim g = Me. CreateGraphics. G. DrawString ("O jazyce Visual Basic" & vbCrLf _. & "a GDI +" & vbCrLf & "A Great Team", _. Nové písmo ("Times New Roman", 20), _. Štětce. Firebrick, 0, 0) End Sub

Je zde několik rozdílů. To je v Button1.Click událost, protože kdy Form1 překreslí se v Zatížení událost, naše grafika je ztracena. Musíme je tedy přidat v pozdější události. Pokud to kódujete, všimnete si, že když dojde ke ztrátě grafiky Form1 musí být překresleno. (Mimimize a maximalizovat znovu vidět.) To je velká výhoda při použití první metody.

Většina odkazů doporučuje použít první metodu, protože vaše grafika bude automaticky překreslena. GDI + může být složité!