Come cambiare i colori di un GDI + lineargradrientbrush?
-
28-09-2020 - |
Domanda
Devo scrivere diverse piccole sfumature verticali (su un ciclo) e quindi penso che sia più veloce riutilizzare un lineargradrientbrush esistente (corretto?)
Ma questo non è quello che mi aspettavo di accadere ...
Drawing2D.LinearGradientBrush myBrush = new Drawing2D.LinearGradientBrush(new Rectangle(0, 0, 200, 200), Color.Red, Color.Black, Drawing2D.LinearGradientMode.Vertical);
myBrush.LinearColors[1] = Color.Blue;
MsgBox(myBrush.LinearColors[1].ToString); //Returns black
.
Quindi, è presente un errore sul codice sopra, o un modo migliore per ottenere diversi gradienti verticali su un ciclo o un modo diverso per cambiare i colori del lineargradrientbrush?
Grazie :)
Soluzione
Costruire un pennello costa quasi nulla rispetto al lavoro svolto per disegnare effettivamente qualcosa con il pennello.
Inoltre, prova a impostare l'intero array invece di sostituire un singolo elemento.
myBrush.LinearColors = new Color[2] { Color.Blue, Color.Whatever };
. Altri suggerimenti
Questo è forse accademico (e forse gran parte è ovvio in retrospettiva!), Ma il motivo che cambia un singolo colore non funziona è che i colori vengono estratti dal codice non gestito prima di essere presentato - seiData una copia del colore e questo è ciò che stai cambiando.Oppure, per metterlo più formalmente, il valore L nella tua dichiarazione è passato per valore e non c'è meccanismo per aggiornare l'originale.
Quando si modifica l'intero array di sfumatura, il setter della proprietà per l'array scrive le modifiche all'oggetto non gestito.