GDI + grafik i Visual Basic. NET Tutorial

GDI + är sättet att rita former, typsnitt, bilder eller i allmänhet något grafiskt i Visual Basic .NETTO.

Den här artikeln är den första delen av en fullständig introduktion till att använda GDI + i Visual Basic .NET.

GDI + är en ovanlig del av .NET. Det var här innan .NET (GDI + släpptes med Windows XP) och det delar inte samma uppdateringscykler som .NET Framework. Microsofts dokumentation anger vanligtvis att Microsoft Windows GDI + är ett API för C / C ++ programmerare i Windows OS. Men GDI + också inkluderar namnutrymmen som används i VB.NET för programvarubaserad grafisk programmering.

WPF

Men det är inte endast grafikprogramvara som tillhandahålls av Microsoft, särskilt sedan Framework 3.0. När Vista och 3.0 introducerades introducerades den helt nya WPF med den. WPF är en hårdvaruaccelererad metod för grafik på hög nivå. Som Tim Cahill, Microsoft WPF-softwareteammedlem, uttrycker det, med WPF "beskriver du din scen med hjälp av konstruktioner på hög nivå, och vi kommer att oroa oss för vila. "Och det faktum att det är hårdvaruaccelererad innebär att du inte behöver dra ner funktionen för din PC-processor och rita former på skärm. Mycket av det verkliga arbetet görs av ditt grafikkort.

instagram viewer

Men vi har varit här tidigare. Varje "stort språng framåt" åtföljs vanligtvis av några snubblar bakåt, och dessutom kommer det att ta år för WPF att arbeta sig igenom zilljoner byte av GDI + -kod. Det är särskilt sant eftersom WPF nästan antar att du arbetar med ett högdrivet system med massor av minne och ett hett grafikkort. Det är därför många datorer inte kunde köra Vista (eller åtminstone använda Vista "Aero" -grafik) när det först introducerades. Så den här serien fortsätter att vara tillgänglig på webbplatsen för alla som fortsätter att behöva använda den.

Bra Ol-kod

GDI + är inte något du kan dra till ett formulär som andra komponenter i VB.NET. Istället måste GDI + -objekt i allmänhet läggas till på gamla sätt - genom att koda dem från grunden! (Även om VB .NET innehåller ett antal mycket praktiska kodavsnitt som verkligen kan hjälpa dig.)

För att koda GDI + använder du objekt och deras medlemmar från ett antal .NET-namnutrymmen. (För närvarande är det faktiskt bara omslagskod för Windows OS-objekt som faktiskt gör jobbet.)

namnrymder

Namnytorna i GDI + är:

Systemet. Teckning

Detta är de kärn GDI + namnutrymme. Den definierar objekt för grundläggande rendering (typsnitt, pennor, basborstar, etc.) och det viktigaste objektet: Grafik. Vi ser mer av detta i bara några stycken.

Systemet. Teckning. Drawing2D

Detta ger dig objekt för mer avancerad tvådimensionell vektorgrafik. Några av dem är lutningsborstar, pennhattar och geometriska omvandlingar.

Systemet. Teckning. Imaging

Om du vill ändra grafiska bilder - det vill säga ändra paletten, extrahera bildmetadata, manipulera metafiler och så vidare - det är det du behöver.

Systemet. Teckning. Utskrift

Om du vill göra bilder till den utskrivna sidan, interagera med själva skrivaren och formatera ett utskriftsjobbets övergripande utseende använder du objekten här.

Systemet. Teckning. Text

Du kan använda teckensnittssamlingar med detta namnutrymme.

Grafikobjekt

Platsen att börja med GDI + är Grafik objekt. Även om de saker du ritar dyker upp på din bildskärm eller en skrivare, är grafikobjektet "duken" som du ritar på.

Men grafikobjektet är också en av de första förvirringskällorna när man använder GDI +. Grafikobjektet är alltid associerat med en viss enhetens sammanhang. Så det första problemet som praktiskt taget varje ny student av GDI + konfronterar är: "Hur får jag ett grafikobjekt?"

Det finns i princip två sätt:

  1. Du kan använda e händelseparameter som skickas till OnPaint händelse med PaintEventArgs objekt. Flera evenemang passerar PaintEventArgs och du kan använda den för att hänvisa till grafikobjektet som redan används av enhetens sammanhang.
  2. Du kan använda CreateGraphics metod för en enhetskontekst för att skapa ett grafikobjekt.

Här är ett exempel på den första metoden:

Protected Overrides Sub OnPaint (_. ByVal e As System. Windows. Former. PaintEventArgs) Dim g As Graphics = e. Grafik. g. DrawString ("Om Visual Basic" & vbCrLf _. & "och GDI +" & vbCrLf & "Ett fantastiskt team", _. Nytt teckensnitt ("Times New Roman", 20), _. Borstar. Firebrick, 0, 0) MyBase. OnPaint (e) Avsluta under

Klicka här för att visa bilden

Lägg till detta i Form1-klassen för ett standard Windows-program för att koda det själv.

I det här exemplet har ett grafikobjekt redan skapats för formuläret Form1. Allt din kod måste göra är att skapa en lokal instans av det objektet och använda det för att rita på samma form. Lägg märke till att din kod Åsidosätter de OnPaint metod. Det är därför MyBase. OnPaint (e) körs i slutet. Du måste se till att om basobjektet (det du åsidosätter) gör något annat, får det en chans att göra det. Ofta fungerar din kod utan detta, men det är en bra idé.

PaintEventArgs

Du kan också få ett grafikobjekt med hjälp av PaintEventArgs objekt överlämnas till din kod i OnPaint och OnPaintBackground-metoder av ett formulär. De PrintPageEventArgs gått i en Utskriv händelse kommer att innehålla ett grafikobjekt för utskrift. Det är till och med möjligt att få ett grafikobjekt för vissa bilder. Detta kan låta dig måla rätt på bilden på samma sätt som du skulle måla på en form eller komponent.

Händelsehanterare

En annan variant av metod en är att lägga till en händelsehanterare för Måla händelse för formuläret. Så här ser koden ut:

Private Sub Form1_Paint (_. ByVal avsändare som objekt, _. ByVal e As System. Windows. Former. PaintEventArgs) _. Hanterar mig. Måla. Dim g som grafik = e. Grafik. g. DrawString ("Om Visual Basic" & vbCrLf _. & "och GDI +" & vbCrLf & "Ett fantastiskt team", _. Nytt teckensnitt ("Times New Roman", 20), _. Borstar. Firebrick, 0, 0) Avsluta under

CreateGraphics

Den andra metoden för att få ett grafikobjekt för din kod använder a CreateGraphics metod som finns med många komponenter. Koden ser ut så här:

Privat subknapp1_Klicka (_. ByVal avsändare som system. Objekt, _. ByVal e As System. EventArgs) _. Handtag-knapp1.Klicka. Dim g = Mig. CreateGraphics. g. DrawString ("Om Visual Basic" & vbCrLf _. & "och GDI +" & vbCrLf & "Ett fantastiskt team", _. Nytt teckensnitt ("Times New Roman", 20), _. Borstar. Firebrick, 0, 0) Avsluta under

Det finns ett par skillnader här. Detta är i Button1.Click händelse för när Form1 återanvänder sig i Ladda händelse, vår grafik går förlorad. Så vi måste lägga till dem i en senare händelse. Om du kodar detta kommer du att märka att grafiken går förlorad när Form1 måste ritas om. (Efterlikna och maximera igen för att se detta.) Det är en stor fördel att använda den första metoden.

De flesta referenser rekommenderar att du använder den första metoden eftersom din grafik kommer att måla om automatiskt. GDI + kan vara svårt!