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