Fórmula para recalcular cores gradientes com base na diferença relativa entre duas cores

StackOverflow https://stackoverflow.com//questions/11690613

  •  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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top