Aqui vamos demonstrar como explorar um efeito gradiente na composição da cor de uma linha.
Para tanto, precisamos dos seguintes componentes principais:
- Definimos form.CreateGraphics
- Definimos 2 pontos p1 e p2 para traçar a linha
- Criamos o objeto LinearGradientBrush
- Criamos o objeto pen
- Traçamos a linha
[System.Drawing.Graphics]$g = $f.CreateGraphics()
$lgb = New-Object System.Drawing.Drawing2D.LinearGradientBrush($p1, $p2, $c1, $c2)
$pen = New-Object System.Drawing.Pen($lgb)
$g.DrawLine($pen, $p1, $p2)
Nesse exemplo de código, estaremos traçando linhas a partir de um ponto central a todos os 360º de um círculo. Cada linha terá o efeito gradiente com as cores verde e azul. O código é o seguinte:
[reflection.assembly]::LoadWithPartialName( "System.Windows.Forms")
[reflection.assembly]::LoadWithPartialName( "System.Drawing")
[System.Windows.Forms.Application]::EnableVisualStyles();
Function line([Int32]$val,[String]$c1,[String]$c2) {
$ang = $val * ([math]::PI/180) ## em Radianos
$r=150 ## tamanho da linha
[System.Drawing.Graphics]$g = $f.CreateGraphics()
$p1 = New-Object System.Drawing.Point(190, 180)
$p2 = New-Object System.Drawing.Point((190+$r*[math]::Cos($ang)), (180+$r*[math]::Sin($ang)))
$lgb = New-Object System.Drawing.Drawing2D.LinearGradientBrush($p1, $p2, $c1, $c2)
$pen = New-Object System.Drawing.Pen($lgb)
$g.DrawLine($pen, $p1, $p2)
$g.Dispose()
}
$f = New-Object Windows.Forms.Form
$f.Width = 400
$f.Height = 400
$f.Show()
$f.Refresh()
for ([Int32]$angulo=0;$angulo -lt 360;$angulo++) {
line $angulo 'Green' 'Blue'
Start-Sleep -Milliseconds 50
}
Start-Sleep -s 5
$f.Close()
$f.Dispose()
Segue o resultado: