Nový

Grafika GDI + v jazyce Visual Basic .NET

Grafika GDI + v jazyce Visual Basic .NET

GDI + je způsob, jak nakreslit tvary, písma, obrázky nebo obecně cokoli grafiky v jazyce Visual Basic .NET.

GDI + je neobvyklá součást .NET. Bylo to tady před .NET (GDI + byl vydán se systémem Windows XP) a nesdílí stejné cykly aktualizace jako .NET Framework. Dokumentace společnosti Microsoft obvykle uvádí, že Microsoft Windows GDI + je API pro programátory C / C ++ do operačního systému Windows. Ale GDI + taky zahrnuje obory názvů 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, s WPF „popsáte svou scénu pomocí konstrukcí na vysoké úrovni a my se o zbytek postaráme“. A skutečnost, že se jedná o hardwarově akcelerovaný proces, znamená, že nemusíte přetahovat činnost počítačového procesoru nakreslením obrazců na obrazovku. Hodně ze skutečné práce se provádí vaší grafickou kartou.

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 + obvykle 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 řady 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:

System.Drawing

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

System.Drawing.Drawing2D

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

System.Drawing.Imaging

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.

System.Drawing.Printing

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.

System.Drawing.Text

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

Grafický objekt

Místo, kde začít s GDI +, jeGrafika 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 +. Objekt Graphics 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žítE parametr události, který je předán doOnPaint událost sPaintEventArgs objekt. Několik akcí projdePaintEventArgs a můžete použít k odkazu na grafický objekt, který je již používán v kontextu zařízení.
  2. Můžete použítCreateGraphics 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.Windows.Forms.PaintEventArgs) Dim g As Graphics = e.Graphics g.DrawString ("About Visual Basic" & vbCrLf _ & "a GDI +" & vbCrLf & "A Great Team" , _ Nové písmo ("Times New Roman", 20), _ Brushes.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ý objektForm1. Všechno, co váš kód musí udělat, je vytvořit lokální instanci tohoto objektu a použít jej k nakreslení stejného formuláře. Všimněte si, že váš kódPřepíše OnPaint metoda. ProtoMyBase.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 vOnPaint aMetody OnPaintBackground formuláře.PrintPageEventArgs prošel vPrintPage 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í proMalovat událost pro formulář. Jak tento kód vypadá:

Private Sub Form1_Paint (_ ByVal Sender As Object, _ ByVal e As System.Windows.Forms.PaintEventArgs) _ Handles Me.Paint Dim g As Graphics = e.Graphics g.DrawString ("About Visual Basic" & vbCrLf _ & "and GDI + "& vbCrLf &" A Great Team ", _ New Font (" Times New Roman ", 20), _ Brushes.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 (_ ByVal odesílatel jako System.Object, _ ByVal e As System.EventArgs) _ Zpracovává Button1.Click Dim g = Me.CreateGraphics g.DrawString ("About Visual Basic" & vbCrLf _ & "a GDI +" & vbCrLf & „Skvělý tým“, _ Nové písmo („Times New Roman“, 20), _ Brushes.Firebrick, 0, 0) End Sub

Je zde několik rozdílů. To je vButton1.Click událost, protože kdyForm1 překreslí se vZatíž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ě grafikyForm1 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é!