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