Formula per ricomputare i colori gradienti in base alla differenza relativa tra due colori
-
12-12-2019 - |
Domanda
Quando viene somministrato un valore di colore arbitrario, come usare la differenza relativa tra tale valore e sfacciato di gradiente 0 (sotto) per regolare i colori dei restanti offset in modo che abbiano la stessa relazione relativa con il nuovo colore come avevano conil colore originale?
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<LinearGradientBrush.GradientStops>
<GradientStop Color="#FFDB0000" Offset="0" />
<GradientStop Color="#FFB74134" Offset="0.6" />
<GradientStop Color="#FFBA5643" Offset="0.85" />
<GradientStop Color="#93C11E00" Offset="1" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
.
La mia sfida è capire la formula matematica da utilizzare per eseguire le relative regolazioni.Una volta che ho questa logica, dovrebbe essere relativamente facile implementarlo nella particolare tecnologia che sto usando (C # /. NET / WPF).
Grazie!
Soluzione
Soluzione:
Usando il modello Hue-Saturation-Luminanza (HSL), ho determinato:
- .
- La differenza di tonalità relativa tra il colore di base del gradiente del modello e ogni modello di arresto del modello.
- La saturazione assoluta e i valori di luminosità di ciascun modello di arresto del colore.
Per generare le nuove fermate del gradiente, ho preso il colore specificato dall'utente e ho spostato la sua tonalità con l'offset di tonalità appropriato calcolato sopra, quindi imposta la sua saturazione e valori di luminosità ai valori determinati sopra.
http://en.wikipedia.org/wiki/hsl_and_hsv fornisce un RGB-HSLformula. http://blogs.msdn.com/b/cjacks/archive/2006/04/12/575476.aspx Descrive come eseguire la conversione HSL-to-RGB.