Gestion de l'état d'un objet graphique
La classe Graphics est au cœur de GDI+. Pour dessiner quoi que ce soit, vous obtenez un objet Graphics, définissez ses propriétés et appelez ses méthodes (DrawLine, DrawImage, DrawString et autres méthodes de même nature).
L'exemple suivant appelle la méthode DrawRectangle d'un objet Graphics. Le premier argument passé à la méthode DrawRectangle est un objet 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);
État graphique
Un objet Graphics est bien plus qu'un simple fournisseur de méthodes de dessin telles que DrawLine et DrawRectangle. Il gère également l'état graphique qui se décompose comme suit :
Paramètres de qualité
Transformations
Région de découpage
Paramètres de qualité
Un objet Graphics possède plusieurs propriétés qui ont un impact sur la qualité des éléments dessinés. Vous pouvez ainsi définir la propriété TextRenderingHint pour spécifier (le cas échéant), le type d'anticrénelage appliqué au texte. Les autres propriétés ayant une incidence sur la qualité sont SmoothingMode, CompositingMode, CompositingQuality et InterpolationMode.
L'exemple suivant dessine deux ellipses, l'une avec le mode lissage AntiAlias et l'autre avec le mode lissage 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);
Transformations
Un objet Graphics gère deux transformations (universelle et page) qui s'appliquent à tous les éléments dessinés par cet objet Graphics. Toute transformation affine peut être stockée dans la transformation universelle. Les transformations affines comprennent l'ajustement, la rotation, la réflexion, l'inclinaison et la translation. La transformation de page peut servir à l'ajustement et au changement d'unités (par exemple, des pixels en pouces). Pour plus d'informations, consultez Systèmes de coordonnées et transformations.
L'exemple suivant définit les transformations universelles et pages d'un objet Graphics. La transformation universelle est définie sur une rotation de trente degrés. La transformation de page est définie pour que les coordonnées passées à la seconde DrawEllipse soient traitées en millimètres et non en pixels. Le code fait deux appels identiques à la méthode DrawEllipse. La transformation universelle s'applique au premier appel de DrawEllipse tandis que les deux transformations (universelles et pages) s'appliquent au second appel de 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);
L'illustration suivante affiche les deux ellipses. Notez que la rotation de trente degrés porte sur l'origine du système de coordonnées (dans le coin supérieur gauche de la zone cliente) et non sur les centres des ellipses. Vous noterez aussi que la largeur du crayon de 1 signifie 1 pixel pour la première ellipse et 1 millimètre pour la seconde.
Région de découpage
Un objet Graphics gère une région de découpage qui s'applique à tous les éléments dessinés par cet objet Graphics. Pour définir la région de découpage, appelez la méthode SetClip.
L'exemple suivant crée une région en forme de signe plus constituée par l'union de deux rectangles. Cette région représente la région de découpage d'un objet Graphics. Ensuite, le code dessine deux traits qui se limitent à l'intérieur de la région de découpage.
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);
L'illustration suivante montre deux traits découpés.
Voir aussi
Concepts
Utilisation de conteneurs graphiques imbriqués