Správa stavu grafického objektu

Třída Graphics je jádrem GDI+. Chcete-li nakreslit cokoli, získáte Graphics objekt, nastavíte jeho vlastnosti a zavoláte jeho metody DrawLine, DrawImage, DrawStringa podobně).

Následující příklad volá DrawRectangle metodu objektu Graphics . První argument předaný DrawRectangle metodě je Pen objekt.

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);  

Stav grafiky

Objekt Graphics poskytuje více než metody kreslení, například 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 TextRenderingHint vlastnost, která určuje typ antialiasingu (pokud existuje) použitý u textu. Další vlastnosti, které ovlivňují kvalitu, jsou SmoothingMode, CompositingModeCompositingQuality, a InterpolationMode.

Následující příklad nakreslí dvě tři tečky, jeden s režimem vyhlazování nastaveným AntiAlias na 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 Graphics objektem. Všechny affinové transformace mohou být uloženy ve světové transformaci. Transformace affinu zahrnují škálování, otáčení, odraz, skewing a translatování. Transformace stránky se dá použít pro škálování a změnu jednotek (například pixely na palce). Další informace naleznete v tématu 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é do sekundy 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í DrawEllipse volání a obě transformace (svět a stránka) se použijí na druhé DrawEllipse volání.

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 dvě tři tečky. Všimněte si, že otočení o 30 stupňů je o původu souřadnicového systému (levý horní roh klientské oblasti), ne o středech tří teček. Všimněte si také, že šířka pera 1 znamená 1 pixel pro první tři tečky a 1 milimetr pro druhé tři tečky.

Illustration that shows two ellipses: rotation and pen width.

Výřez oblasti

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 SetClip metody.

Následující příklad vytvoří oblast ve tvaru plus vytvořením sjednocení dvou obdélníků. Tato oblast je určena jako oblast výřezu 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:

Diagram that shows the limited clip region.

Viz také