Appunti
Creare sfumature di colore con Graphics
Nella lezione sulla grafica si è visto come poter disegnare molte entità, ma solo in modo statico, compatto, di uno stesso colore. In
questo tutorial spiegherò come modulare il colore creando delle gradevoli sfumature.A questo scopo bisogna utilizzare gli oggetti ColorBlend e LinearGradientBrush, entrambi definiti nel namespace System.Drawing.Drawing2D. Prima di tutto bisogna inizializzare un nuovo pennello: il costruttore di LinearGradientBrush accetta quattro parametri, nell'ordine, il punto in cui iniziare il gradiente, il punto in cui terminare, il colore iniziale e quello finale. Ad esempio:
Successivamente bisogna creare un oggetto ColorBlend che ha la funzione di definire da dove a dove e con quali colori si debbano sfumare i colori, poiché le sfumature possono essere composte anche da tre o quattro componenti diverse. Sembra inutile, ma esso viene usato per calcolare e colorare in modo esatto i punti. Il suo costruttore accetta un intero che specifica quanti siano i colori da considerare.'Questo pennello parte dal punto (9, 9) e sfuma dal trasparente 'fino al nero nel punto (70, 70) Dim BrushAs New LinearGradientBrush(New Point(9, 9),New Point(70, 70), _ Color.Transparent, Color.Black)
La proprietà InterpolationColors è un oggetto ColorBlend che aiuta il pennello nei calcoli di interpolazione. Supponendo che questo codice sia inserito nell'evento Paint di un Form, si avrà:'Crea un nuovo oggetto sfumatura a due colori Dim BlendAs New ColorBlend(2)'Imposta i rispettivi colori iniziale e finale Blend.Colors =New Color() {Drawing.Color.Transparent, Color.Black}'E le posizioni nella sfumatura. Tali posizioni devono essere 'espresse da un numero decimale compreso tra 0 e 1: il primo deve 'sempre essere zero e l'ultimo sempre 1. In questo caso, dato che ci 'sono solo due colori, il primo occuperà la posizione 0 'e il secondo la 1 Blend.Positions =New Single () {0.0, 1.0}'Infine collega i due oggetti Brush.InterpolationColors = Blend
Con questo risultato:Private Sub Form1_Paint(ByVal senderAs Object ,ByVal eAs PaintEventArgs) _Handles MyBase .PaintDim BrushAs New LinearGradientBrush( _New Point(9, 9),New Point(70, 70), _ Color.Transparent, Color.Black)Dim BlendAs New ColorBlend(2) Blend.Colors =New Color() {Drawing.Color.Transparent, Color.Black} Blend.Positions =New Single () {0.0, 1.0} Brush.InterpolationColors = Blend e.Graphics.FillRectangle(Brush,New Rectangle(10, 10, 60, 60))End Sub
Risultato
Ho usato questo approccio nel mio programma Totem Charting:
Totem Charting
The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.



