Disegnare in una DrawingArea un rettangolo colorato con distinzione sfumata fra i colori

Da Gambas-it.org - Wikipedia.

Per ottenere una distinzione sfumata dei confini fra un colore ed un altro prossimo di un rettangolo disegnato in una DrawingArea, si deve utilizzare il metodo .LinearGradient() della Classe Paint. Il passaggio da un colore all'altro avviene in modo sfumato sia attraverso la sua dissolvenza sia mediante la sua fusione con la parte dissolta dell'altro colore.


Mostriamo un semplice esempio, nel quale viene disegnato un rettangolo internamente colorato con quattro colori blu, verde, giallo e rosso, distinti l'uno dall'altro prossimo in modo sfumato:

Public Sub Form_Open()

  DrawingArea1.Background = Color.White

End


Public Sub DrawingArea1_Draw()

 Dim c As Integer[] = [Color.Blue, Color.Green, Color.Yellow, Color.Red]
 Dim f As Float[] = [0, 0.34, 0.67, 1]

  With Paint
    .Brush = .LinearGradient(10, 40, 300, 40, c, f)
    .Rectangle(10, 40, 300, 40)
    .Fill
    .End
  End With

End

Disegnare una matrice orizzontale e due matrici verticali, di cui una con la posizione invertita dei colori

L'esempio precedente ha mostrato una matrice rettangolare estesa in orizzontale, costituita dai quattro colori impostati nell'array di tipo Intero.

Mostriamo un esempio, nel quale, oltre a disegnare su una DrawingArea un'analoga matrice rettangolare estesa in orizzontale e formata da 3 colori, saranno disegnate due matrici verticali, alla seconda delle quali saranno invertiti i colori.

Public Sub Form_Open()
 
 With Me
   .Width = 480
   .Height = 480
 End With
 
 With DrawingArea1
   .W = Me.Width
   .H = Me.Height
 End With
 
End


Public Sub DrawingArea1_Draw()
 
 Dim c As Integer[] = [Color.Green, Color.Yellow, Color.Red]
 Dim f As Float[] = [0, 0.8, 1]
 
 With Paint
' Imposta la posizione della prima matrice colorata all'interno della "DrawingArea":
   .Translate(DrawingArea1.H * 0.2, 50)
' Imposta la matrice in orizzontale:
   .Brush = .LinearGradient(0, 0, 300, 0, c, f)
' Imposta in orizzontale il rettangolo che conterrà la matrice:
   .Rectangle(0, 0, 300, 50)
   .Fill
   
' Imposta la posizione della seconda matrice colorata all'interno della "DrawingArea":
   .Translate(0, DrawingArea1.H * 0.2)
' Imposta la matrice in verticale:
   .Brush = .LinearGradient(0, 0, 0, 300, c, f)
' Imposta in verticale il rettangolo che conterrà la matrice:
   .Rectangle(0, 0, 50, 300)
   .Fill
' Scrive sulla "DrawingArea":
   .Brush = .Color(Color.Black)
   .Text("v\ne\nr\nt\ni\nc\na\nl\ne\n\ni\nn\nv\ne\nr\nt\ni\nt\na", 240, 140, 10, 10, Align.Left)
   .Fill
   
' Imposta la posizione della terza matrice colorata all'interno della "DrawingArea":
   .Translate(250, DrawingArea1.H * 0.62)
' Imposta l'inversione dei colori costituenti la seconda matrice:
   .Scale(1, -1)
' Imposta la matrice in verticale:
   .Brush = .LinearGradient(0, 0, 0, 300, c, f)
' Imposta in verticale il rettangolo che conterrà la matrice:
   .Rectangle(0, 0, 50, 300)
   .Fill
   .End
 End With
  
End