Utilizzo di pennelli opachi e semitrasparenti

Quando si riempie una forma è necessario passare un oggetto Brush a uno dei metodi di riempimento della classe Graphics. L'unico parametro del costruttore SolidBrush è un oggetto Color. Per riempire una forma opaca, impostare la componente alfa del colore su 255. Per riempire una forma semitrasparente, impostare la componente alfa su un valore qualsiasi compreso tra 1 e 254.

Quando si riempie una forma semitrasparente il colore della forma viene sfumato con i colori dello sfondo. La componente alfa consente di specificare la combinazione tra il colore della forma e quello di sfondo; i valori alfa vicini a zero rendono più intensi i colori di sfondo, mentre i valori alfa vicino a 255 rendono più intenso il colore della forma.

Nell'esempio che segue si disegna un'immagine bitmap e si riempiono tre ellissi che si sovrappongono all'immagine bitmap. Nella prima ellisse viene utilizzata una componente alfa pari a 255 e l'ellissi risulta pertanto opaca. Nella seconda e nella terza ellisse viene utilizzata una componente alfa pari a 128 e perciò le ellissi risultano semitrasparenti, ovvero attraverso le ellissi è possibile vedere l'immagine di sfondo. La chiamata con qui viene impostata la proprietà CompositingQuality consente di determinare la sfumatura della terza linea in combinazione con la correzione di gamma.

Dim bitmap As New Bitmap("Texture1.jpg")
e.Graphics.DrawImage(bitmap, 50, 50, bitmap.Width, bitmap.Height)

Dim opaqueBrush As New SolidBrush(Color.FromArgb(255, 0, 0, 255))
Dim semiTransBrush As New SolidBrush(Color.FromArgb(128, 0, 0, 255))

e.Graphics.FillEllipse(opaqueBrush, 35, 45, 45, 30)
e.Graphics.FillEllipse(semiTransBrush, 86, 45, 45, 30)

e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected
e.Graphics.FillEllipse(semiTransBrush, 40, 90, 86, 30)
[C#]
Bitmap bitmap = new Bitmap("Texture1.jpg");
e.Graphics.DrawImage(bitmap, 50, 50, bitmap.Width, bitmap.Height);

SolidBrush opaqueBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(128, 0, 0, 255));

e.Graphics.FillEllipse(opaqueBrush, 35, 45, 45, 30);
e.Graphics.FillEllipse(semiTransBrush, 86, 45, 45, 30);

e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected;
e.Graphics.FillEllipse(semiTransBrush, 40, 90, 86, 30);

Nell'illustrazione che segue si mostra l'output del codice precedente.