Fórmula para recalcular cores gradientes com base na diferença relativa entre duas cores
-
12-12-2019 - |
Pergunta
Ao receber um valor de cor arbitrário, como eu usaria a diferença relativa entre esse valor e o deslocamento de gradiente 0 (abaixo) para ajustar as cores dos deslocamentos restantes, de modo que eles tenham o mesmo relacionamento relativo com a nova cor que tinham com a cor original ?
<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>
Meu desafio é descobrir a fórmula matemática a ser usada para fazer os ajustes relativos.Depois de ter essa lógica, será relativamente fácil implementá-la na tecnologia específica que estou usando (C#/.Net/WPF).
Obrigado!
Solução
Solução:
Usando o modelo Hue-Saturation-Luminance (HSL), determinei:
- a diferença relativa de matiz entre a cor base do gradiente do modelo e cada cor final do modelo.
- os valores absolutos de saturação e luminosidade de cada cor de parada do modelo.
Para gerar as novas paradas de gradiente, peguei a cor especificada pelo usuário e mudei seu matiz pelo deslocamento de matiz apropriado calculado acima, depois configurei seus valores de saturação e luminosidade para os valores determinados acima.
http://en.wikipedia.org/wiki/HSL_and_HSV fornece uma fórmula RGB-HSL. http://blogs.msdn.com/b/cjacks/archive/2006/04/12/575476.aspx descreve como fazer a conversão de HSL para RGB.