Compartilhar via


Como: Criar um gradiente Linear

GDI+Fornece horizontais, verticais e diagonal gradientes lineares. Por padrão, a cor em um gradiente linear altera uniformemente. No entanto, você pode personalizar um gradiente linear para que a cor é alterada de maneira não-uniforme.

O exemplo a seguir preenche uma linha, uma elipse e um retângulo com um pincel de gradiente horizontal linear.

O LinearGradientBrush construtor recebe quatro argumentos: dois pontos e duas cores. O primeiro ponto (0, 10) é associado com a primeira cor (vermelho), e o segundo ponto (200, 10) é associado à segunda cor (azul). Como você esperava, a linha desenhada de (0, 10) para (200, 10) alterações graduais de vermelho para azul.

De dezenas de pontos (50, 10) e 200 (, 10) não são importantes. O importante é que os dois pontos têm a mesma coordenada de segunda — a linha conectá-los é horizontal. Elipse e retângulo também alteram gradualmente de vermelho para azul como a coordenada horizontal vai de 0 a 200.

A ilustração a seguir mostra o retângulo, elipse e a linha. Observe que o gradiente de cor repete-se como a coordenada horizontal fica acima de 200.

Gradiente linear

Para usar os gradientes lineares horizontais

  • Passe em azul de vermelho e opaca opaco como o terceiro e quarto argumento, respectivamente.

            Dim linGrBrush As New LinearGradientBrush( _
               New Point(0, 10), _
               New Point(200, 10), _
               Color.FromArgb(255, 255, 0, 0), _
               Color.FromArgb(255, 0, 0, 255))
            Dim pen As New Pen(linGrBrush)
    
            e.Graphics.DrawLine(pen, 0, 10, 200, 10)
            e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100)
            e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30)
    
    
    LinearGradientBrush linGrBrush = new LinearGradientBrush(
       new Point(0, 10),
       new Point(200, 10),
       Color.FromArgb(255, 255, 0, 0),   // Opaque red
       Color.FromArgb(255, 0, 0, 255));  // Opaque blue
    
    Pen pen = new Pen(linGrBrush);
    
    e.Graphics.DrawLine(pen, 0, 10, 200, 10);
    e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100);
    e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30);
    

No exemplo anterior, os componentes de cor alteram linearmente conforme você move de uma coordenada horizontal do 0 para uma coordenada horizontal de 200. Por exemplo, um ponto cuja primeira coordenada é entre 0 e 200 terá um componente azul entre 0 e 255.

GDI+permite ajustar a maneira como uma cor varia de uma borda de um gradiente para o outro. Suponha que você deseja criar um pincel de gradiente que muda de preto para vermelho, de acordo com a tabela a seguir.

Coordenada horizontal

Componentes RGB

0

(0, 0, 0)

40

(128, 0, 0)

200

(255, 0, 0)

Observe que o componente vermelho na metade de intensidade quando a coordenada horizontal é somente 20% a maneira de 0 a 200.

O exemplo a seguir define o Blend propriedade de um LinearGradientBrush o objeto para associar três quantidades relativas com três posições relativas. Como na tabela anterior, uma intensidade relativa de 0,5 está associada uma posição relativa de 0,2. O código preenche uma elipse e um retângulo com o pincel de gradiente.

A ilustração a seguir mostra o retângulo e elipse resultante.

Gradiente linear

Para personalizar os gradientes lineares

  • Passe em vermelho de preto e opaco opaco como o terceiro e quarto argumento, respectivamente.

            Dim linGrBrush As New LinearGradientBrush( _
               New Point(0, 10), _
               New Point(200, 10), _
               Color.FromArgb(255, 0, 0, 0), _
               Color.FromArgb(255, 255, 0, 0))
    
            Dim relativeIntensities As Single() = {0.0F, 0.5F, 1.0F}
            Dim relativePositions As Single() = {0.0F, 0.2F, 1.0F}
    
            'Create a Blend object and assign it to linGrBrush.
            Dim blend As New Blend()
            blend.Factors = relativeIntensities
            blend.Positions = relativePositions
            linGrBrush.Blend = blend
    
            e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100)
            e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30)
    
    
    LinearGradientBrush linGrBrush = new LinearGradientBrush(
       new Point(0, 10),
       new Point(200, 10),
       Color.FromArgb(255, 0, 0, 0),     // Opaque black 
       Color.FromArgb(255, 255, 0, 0));  // Opaque red
    
    float[] relativeIntensities = { 0.0f, 0.5f, 1.0f };
    float[] relativePositions = { 0.0f, 0.2f, 1.0f };
    
    //Create a Blend object and assign it to linGrBrush.
    Blend blend = new Blend();
    blend.Factors = relativeIntensities;
    blend.Positions = relativePositions;
    linGrBrush.Blend = blend;
    
    e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100);
    e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30);
    

Os gradientes nos exemplos anteriores foram horizontais; ou seja, a cor gradualmente muda conforme você se mover ao longo de qualquer linha horizontal. Você também pode definir verticais gradientes e gradientes diagonal.

O exemplo a seguir passa os pontos (0, 0) e (200, 100) para um LinearGradientBrush construtor. A cor azul está associada (0, 0) e o verde da cor está associado (200, 100). Uma linha (10 de largura de caneta) e uma elipse são preenchidas com o pincel de gradiente linear.

A ilustração a seguir mostra a linha e a elipse. Observe que as alterações de elipse na cor gradualmente à medida que você se mover ao longo de qualquer linha que é paralelo à linha de passar por (0, 0) e (200, 100).

Gradiente linear

Para criar gradientes lineares de diagonal

  • Passe em verde de azul e opaco opaco como o terceiro e quarto argumento, respectivamente.

            Dim linGrBrush As New LinearGradientBrush( _
               New Point(0, 0), _
               New Point(200, 100), _
               Color.FromArgb(255, 0, 0, 255), _
               Color.FromArgb(255, 0, 255, 0))
            ' opaque blue
            ' opaque green
            Dim pen As New Pen(linGrBrush, 10)
    
            e.Graphics.DrawLine(pen, 0, 0, 600, 300)
            e.Graphics.FillEllipse(linGrBrush, 10, 100, 200, 100)
    
    
    LinearGradientBrush linGrBrush = new LinearGradientBrush(
       new Point(0, 0),
       new Point(200, 100),
       Color.FromArgb(255, 0, 0, 255),   // opaque blue
       Color.FromArgb(255, 0, 255, 0));  // opaque green
    
    Pen pen = new Pen(linGrBrush, 10);
    
    e.Graphics.DrawLine(pen, 0, 0, 600, 300);
    e.Graphics.FillEllipse(linGrBrush, 10, 100, 200, 100);
    

Consulte também

Outros recursos

Usando um pincel de gradiente para preencher formas

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