Partilhar via


Gerenciar o estado de um objeto Graphics

O Graphics classe é a essência do GDI+. Para desenhar algo, você irá obter um Graphics o objeto, defina suas propriedades e chamar seus métodos DrawLine, DrawImage, DrawStringe assim por diante).

O exemplo a seguir chama o DrawRectangle o método de um Graphics objeto. O primeiro argumento passado para o DrawRectangle método é um Pen objeto.

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

O estado de elementos gráficos

A Graphics objeto mais de fornecer métodos de desenho, como DrawLine e DrawRectangle. A Graphics objeto também mantém o estado de elementos gráficos, o que pode ser dividido nas seguintes categorias:

  • Configurações de qualidade

  • Transformações

  • Região de recorte

Configurações de qualidade

A Graphics objeto tem várias propriedades que influenciam a qualidade dos itens que são desenhados. Por exemplo, você pode definir o TextRenderingHint propriedade para especificar o tipo de suavização (se houver) é aplicada ao texto. Outras propriedades que influenciam a qualidade são SmoothingMode, CompositingMode, CompositingQuality, e InterpolationMode.

O exemplo a seguir desenha dois elipses, um com o modo de suavização configurado para AntiAlias e outra com o modo de suavização definido como 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);

Transformações

A Graphics objeto mantém duas transformações (world e página) que são aplicadas a todos os itens desenhados pelo que Graphics objeto. Qualquer transformação afim pode ser armazenada na transformação do mundo. Transformações afim incluem a escala, rotação, refletindo, inclinação e tradução. A transformação de página pode ser usada para o dimensionamento e alteração de unidades (por exemplo, os pixels em polegadas). Para obter mais informações, consulte sistemas de coordenadas e transformações.

O exemplo a seguir define as transformações do mundo e a página de um Graphics objeto. A transformação do mundo é definida como uma rotação de 30 graus. A transformação de página é definida para que as coordenadas são passadas para a segunda DrawEllipse serão tratados como milímetros, em vez de pixels. O código faz duas chamadas idênticas para o DrawEllipse método. A transformação do mundo é aplicada ao primeiro DrawEllipse chamada e duas transformações (world e página) são aplicadas à segunda DrawEllipse chamada.

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

A ilustração a seguir mostra duas elipses. Observe que a rotação de 30 graus sobre a origem do sistema de coordenadas (no canto superior esquerdo da área do cliente), não sobre os centros das elipses. Observe também que a largura da caneta 1 significa que 1 pixel para a primeira elipse e 1 milímetro para a segunda elipse.

Forma oval

Região de recorte

A Graphics objeto mantém uma região de corte que se aplica a todos os itens desenhados pelo que Graphics objeto. Você pode definir a região de recorte, chamando o SetClip método.

O exemplo a seguir cria uma região em forma de sinal de adição, formando a união de dois retângulos. Essa região é designada como a região de recorte de um Graphics objeto. Em seguida, o código desenha duas linhas que são restritas ao interior da região de recorte.

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

A ilustração a seguir mostra as linhas cortadas.

Região de clipe limitada

Consulte também

Conceitos

O uso de contêineres aninhados de gráficos

Outros recursos

Elementos gráficos e desenho em formulários do Windows