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.
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:
Viz také
.NET Desktop feedback
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro