Colors 基于两种颜色之间的相对差异重新计算渐变颜色的公式

Colors 基于两种颜色之间的相对差异重新计算渐变颜色的公式,colors,gradient,color-theory,Colors,Gradient,Color Theory,当给定任意颜色值时,如何使用该值和渐变偏移0(以下)之间的相对差来调整其余偏移的颜色,以便它们与新颜色具有与原始颜色相同的相对关系 <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <LinearGradientBrush.GradientStops> <GradientStop Color="#FFDB0000" Offset="0" /> <GradientStop Color

当给定任意颜色值时,如何使用该值和渐变偏移0(以下)之间的相对差来调整其余偏移的颜色,以便它们与新颜色具有与原始颜色相同的相对关系

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

我的挑战是找出用于进行相对调整的数学公式。一旦我有了这个逻辑,在我使用的特定技术(C#/.Net/WPF)中实现它应该相对容易

谢谢大家!

解决方案:

使用色调饱和度亮度(HSL)模型,我确定:

  • 模板渐变的基础颜色和每个模板停止颜色之间的相对色调差异
  • 每个模板停止颜色的绝对饱和度和亮度值
为了生成新的渐变停止点,我采用用户指定的颜色,并将其色调移动到上面计算的适当色调偏移量,然后将其饱和度和亮度值设置为上面确定的值

提供RGB-HSL公式。描述如何进行HSL到RGB的转换。

解决方案:

使用色调饱和度亮度(HSL)模型,我确定:

  • 模板渐变的基础颜色和每个模板停止颜色之间的相对色调差异
  • 每个模板停止颜色的绝对饱和度和亮度值
为了生成新的渐变停止点,我采用用户指定的颜色,并将其色调移动到上面计算的适当色调偏移量,然后将其饱和度和亮度值设置为上面确定的值

提供RGB-HSL公式。描述如何进行HSL到RGB的转换