Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GDI+ använder tre koordinatutrymmen: värld, sida och enhet. Världskoordinater är koordinaterna som används för att modellera en viss grafisk värld och är koordinaterna som du skickar till metoder i .NET Framework. Sidkoordinater refererar till koordinatsystemet som används av en rityta, till exempel ett formulär eller en kontroll. Enhetskoordinater är koordinaterna som används av den fysiska enhet som ritas på, till exempel en skärm eller pappersark. När du anropar myGraphics.DrawLine(myPen, 0, 0, 160, 80)
finns de punkter som du skickar till metoden DrawLine–(0, 0)
och (160, 80)
– i världskoordinatutrymmet. Innan GDI+ kan rita linjen på skärmen passerar koordinaterna genom en sekvens med transformeringar. En transformering, kallad världstransformeringen, konverterar världskoordinater till sidkoordinater och en annan transformering, som kallas sidtransformeringen, konverterar sidkoordinater till enhetskoordinater.
Transformationer och koordinatsystem
Anta att du vill arbeta med ett koordinatsystem som har sitt ursprung i klientområdets brödtext i stället för det övre vänstra hörnet. Anta till exempel att du vill att ursprunget ska vara 100 bildpunkter från klientområdets vänstra kant och 50 bildpunkter överst i klientområdet. Följande bild visar ett sådant koordinatsystem.
När du anropar myGraphics.DrawLine(myPen, 0, 0, 160, 80)
visas raden i följande bild.
Koordinaterna för radens slutpunkter i de tre koordinatutrymmena är följande:
Koordinatutrymme | Slutpunktskoordinater |
---|---|
Värld | (0, 0) till (160, 80) |
Sida | (100, 50) till (260, 130) |
Apparat | (100, 50) till (260, 130) |
Observera att sidkoordinatutrymmet har sitt ursprung i det övre vänstra hörnet i klientområdet. Detta kommer alltid att vara fallet. Observera också att eftersom måttenheten är pixeln är enhetskoordinaterna samma som sidkoordinaterna. Om du ställer in måttenheten på något annat än bildpunkter (till exempel tum) skiljer sig enhetskoordinaterna från sidkoordinaterna.
Världsomvandlingen, som mappar världskoordinater till sidkoordinater, finns i egenskapen Transform för klassen Graphics. I föregående exempel är världsomvandlingen en översättning på 100 enheter i x-riktningen och 50 enheter i y-riktningen. I följande exempel anges världstransformeringen av Graphics-objektet och sedan använder det Graphics-objektet för att rita den linje som visas i föregående figur.
myGraphics.TranslateTransform(100, 50);
myGraphics.DrawLine(myPen, 0, 0, 160, 80);
myGraphics.TranslateTransform(100, 50)
myGraphics.DrawLine(myPen, 0, 0, 160, 80)
Sidtransformeringen mappar sidkoordinater till enhetskoordinater. Klassen Graphics innehåller egenskaperna PageUnit och PageScale för att ändra sidtransformeringen. Klassen Graphics innehåller också två skrivskyddade egenskaper, DpiX och DpiY, för att undersöka visningsenhetens horisontella och vertikala upplösning i punkter per tum (dpi).
Du kan använda egenskapen PageUnit för klassen Graphics för att ange en annan måttenhet än pixeln.
Anmärkning
Du kan inte ange egenskapen PageUnit till Worldeftersom detta inte är en fysisk enhet och orsakar ett undantag.
I följande exempel ritas en linje från (0, 0) till (2, 1), där punkten (2, 1) är 2 tum till höger och 1 tum nedåt från punkten (0, 0):
myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)
Anmärkning
Om du inte anger en pennbredd när du skapar pennan ritas en linje som är en tum bred i föregående exempel. Du kan ange pennbredden i det andra argumentet till Pen konstruktorn:
Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX);
Dim myPen As New Pen(Color.Black, 1 / myGraphics.DpiX)
Om vi antar att visningsenheten har 96 punkter per tum i vågrät riktning och 96 punkter per tum i lodrät riktning, har radslutpunkterna i föregående exempel följande koordinater i de tre koordinatutrymmena:
Koordinatutrymme | Slutpunktskoordinater |
---|---|
Värld | (0, 0) till (2, 1) |
Sida | (0, 0) till (2, 1) |
Apparat | (0, 0) till (192, 96) |
Observera att eftersom ursprunget för världskoordinatutrymmet finns i det övre vänstra hörnet av klientområdet är sidkoordinaterna desamma som världskoordinaterna.
Du kan kombinera världen och sidtransformeringar för att uppnå en mängd olika effekter. Anta till exempel att du vill använda tum som måttenhet och vill att koordinatsystemets ursprung ska vara 2 tum från klientområdets vänstra kant och 1/2 tum från toppen av klientområdet. I följande exempel anges världen och sidtransformeringar för ett Graphics objekt och ritar sedan en linje från (0, 0) till (2, 1):
myGraphics.TranslateTransform(2, 0.5f);
myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
myGraphics.TranslateTransform(2, 0.5F)
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)
Följande bild visar linje- och koordinatsystemet.
Om vi antar att visningsenheten har 96 punkter per tum i vågrät riktning och 96 punkter per tum i lodrät riktning, har radslutpunkterna i föregående exempel följande koordinater i de tre koordinatutrymmena:
Koordinatutrymme | Slutpunktskoordinater |
---|---|
Värld | (0, 0) till (2, 1) |
Sida | (2, 0,5) till (4, 1,5) |
Apparat | (192, 48) till (384, 144) |
Se även
.NET Desktop feedback