Správa stavu grafického objektu
Třída Graphics je jádrem GDI+. Pokud chcete nakreslit cokoli, získáte objekt Graphics, nastavíte jeho vlastnosti a zavoláte jeho metody DrawLine, DrawImage, DrawStringa podobně).
Příklad níže volá metodu DrawRectangle u objektu Graphics. První argument předaný metodě DrawRectangle je objekt Pen.
Dim graphics As Graphics = e.Graphics
Dim pen As New Pen(Color.Blue) ' Opaque blue
graphics.DrawRectangle(pen, 10, 10, 200, 100)
Graphics graphics = e.Graphics;
Pen pen = new Pen(Color.Blue); // Opaque blue
graphics.DrawRectangle(pen, 10, 10, 200, 100);
Grafický stav
Objekt Graphics poskytuje více než metody kreslení, jako jsou DrawLine a DrawRectangle. Objekt Graphics také udržuje grafický stav, který lze rozdělit do následujících kategorií:
Nastavení kvality
Transformace
Výřez oblasti
Nastavení kvality
Objekt Graphics má několik vlastností, které ovlivňují kvalitu nakreslených položek. Můžete například nastavit vlastnost TextRenderingHint, která určuje typ antialiasingu (pokud existuje) použitý u textu. Další vlastnosti, které ovlivňují kvalitu, jsou SmoothingMode, CompositingMode, CompositingQualitya InterpolationMode.
Následující příklad nakreslí dvě elipsy, jedna s režimem vyhlazování nastaveným na AntiAlias a druhá s režimem vyhlazování nastaveným na HighSpeed:
Dim graphics As Graphics = e.Graphics
Dim pen As New Pen(Color.Blue)
graphics.SmoothingMode = SmoothingMode.AntiAlias
graphics.DrawEllipse(pen, 0, 0, 200, 100)
graphics.SmoothingMode = SmoothingMode.HighSpeed
graphics.DrawEllipse(pen, 0, 150, 200, 100)
Graphics graphics = e.Graphics;
Pen pen = new Pen(Color.Blue);
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.DrawEllipse(pen, 0, 0, 200, 100);
graphics.SmoothingMode = SmoothingMode.HighSpeed;
graphics.DrawEllipse(pen, 0, 150, 200, 100);
Transformace
Objekt Graphics udržuje dvě transformace (svět a stránku), které se použijí u všech položek nakreslených tímto objektem Graphics. Všechny affinové transformace mohou být uloženy ve světové transformaci. Afinní transformace zahrnují škálování, otáčení, odrážení, zkosení a posunutí. Transformace stránky se dá použít pro škálování a změnu jednotek (například pixely na palce). Další informace viz část Souřadnicové systémy a transformace.
Následující příklad nastaví svět a transformace stránky objektu Graphics. Světová transformace je nastavená na otočení o 30 stupňů. Transformace stránky je nastavená tak, aby souřadnice předané druhému DrawEllipse byly považovány za milimetry místo pixelů. Kód provádí dvě identická volání metody DrawEllipse. Světová transformace se použije na první volání DrawEllipse a obě transformace (světová a stránková) se použijí na druhé volání DrawEllipse.
Dim graphics As Graphics = e.Graphics
Dim pen As New Pen(Color.Red)
graphics.ResetTransform()
graphics.RotateTransform(30) ' world transformation
graphics.DrawEllipse(pen, 0, 0, 100, 50)
graphics.PageUnit = GraphicsUnit.Millimeter ' page transformation
graphics.DrawEllipse(pen, 0, 0, 100, 50)
Graphics graphics = e.Graphics;
Pen pen = new Pen(Color.Red);
graphics.ResetTransform();
graphics.RotateTransform(30); // world transformation
graphics.DrawEllipse(pen, 0, 0, 100, 50);
graphics.PageUnit = GraphicsUnit.Millimeter; // page transformation
graphics.DrawEllipse(pen, 0, 0, 100, 50);
Následující obrázek znázorňuje dva elipsy. Všimněte si, že otočení o 30 stupňů je kolem původu souřadnicového systému (levý horní roh klientské oblasti), ne kolem středů elips. Všimněte si také, že šířka pera 1 znamená 1 pixel pro první elipsu a 1 milimetr pro druhou elipsu.
Ořezová oblast
Objekt Graphics udržuje oblast výřezu, která se vztahuje na všechny položky nakreslené tímto Graphics objektem. Oblast výřezu můžete nastavit voláním metody SetClip.
Následující příklad vytvoří oblast ve tvaru plus vytvořením sjednocení dvou obdélníků. Tato oblast je určena jako ořezová oblast objektu Graphics. Pak kód nakreslí dva řádky, které jsou omezeny na vnitřní část oblasti výřezu.
Dim graphics As Graphics = e.Graphics
' Opaque red, width 5
Dim pen As New Pen(Color.Red, 5)
' Opaque aqua
Dim brush As New SolidBrush(Color.FromArgb(255, 180, 255, 255))
' Create a plus-shaped region by forming the union of two rectangles.
Dim [region] As New [Region](New Rectangle(50, 0, 50, 150))
[region].Union(New Rectangle(0, 50, 150, 50))
graphics.FillRegion(brush, [region])
' Set the clipping region.
graphics.SetClip([region], CombineMode.Replace)
' Draw two clipped lines.
graphics.DrawLine(pen, 0, 30, 150, 160)
graphics.DrawLine(pen, 40, 20, 190, 150)
Graphics graphics = e.Graphics;
// Opaque red, width 5
Pen pen = new Pen(Color.Red, 5);
// Opaque aqua
SolidBrush brush = new SolidBrush(Color.FromArgb(255, 180, 255, 255));
// Create a plus-shaped region by forming the union of two rectangles.
Region region = new Region(new Rectangle(50, 0, 50, 150));
region.Union(new Rectangle(0, 50, 150, 50));
graphics.FillRegion(brush, region);
// Set the clipping region.
graphics.SetClip(region, CombineMode.Replace);
// Draw two clipped lines.
graphics.DrawLine(pen, 0, 30, 150, 160);
graphics.DrawLine(pen, 40, 20, 190, 150);
Následující obrázek znázorňuje oříznuté čáry:
Viz také
.NET Desktop feedback