Como: Criar um gradiente linear

GDI+ Fornece gradientes lineares diagonal horizontais e verticais. 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 modo não-uniforme.

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

The 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 de (200, 10) é associado com a segunda cor (azul).sistema autônomo você poderia esperar, a linha desenhada de (0, 10) para (200, 10) gradualmente mudará de vermelho para azul.

10S em pontos (50, 10) e 200 (, 10) não são importantes.O importante é que os dois pontos têm a mesma coordenada segunda — a linha de conectá-los é horizontal.Elipse e retângulo também alterar gradualmente de vermelho para azul sistema autônomo a coordenada horizontal varia de 0 a 200.

A ilustração a seguir mostra a linha, a elipse e o retângulo.Observe que o gradiente de cor repete sistema autônomo o incresistema autônomoes coordenadas horizontais além de 200.

Para usar gradientes lineares horizontais

  • Passe em azul de vermelho e opaca opaco sistema autônomo 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, sistema autônomo componentes da cor alteram linearmente à medida que você move de uma coordenada horizontal do 0 para uma coordenada horizontal de 200.Por exemplo, um ponto de coordenada cuja primeira está entre 0 e 200 tem um componente azul que está entre 0 e 255.

GDI+ permite ajustar a forma de que uma cor varia de uma borda de um gradiente para o Outros. Suponha que você queira criar um pincel em dégradé 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 com metade da intensidade quando a coordenada horizontal é somente 20 % do processo de 0 para 200.

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

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

Para personalizar gradientes lineares

  • Passe o vermelho opaco e preto opaco sistema autônomo 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);
    

Gradientes nos exemplos anteriores foram horizontais; ou seja, a cor gradualmente muda sistema autônomo mover ao longo de qualquer linha horizontal.Você também pode definir gradientes verticais e gradientes diagonal.

O exemplo a seguir passa para um pontos (0, 0) e (200, 100)LinearGradientBrush construtor. Azul a cor está associada (0, 0), e o cor verde é associado (200, 100).Uma linha (com largura de caneta 10) e uma elipse estão preenchidos com o pincel em dégradé linear.

A ilustração a seguir mostra a linha e a elipse.Observe que na elipse cor gradualmente muda sistema autônomo mover ao longo de qualquer linha que é paralela psistema autônomosing a linha através de (0, 0) e (200, 100).

Para criar gradientes lineares diagonal

  • Passe o verde azul e opaco opaco sistema autônomo 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