基于两种颜色之间的相对差异重新计算梯度颜色的公式
问题描述:
当给定任意颜色值时,我将如何使用该值与梯度偏移量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)模型,我确定:
- 模板梯度的基本颜色和每个模板停止颜色之间的相对色调差。
- 每个模板停止颜色的绝对饱和度和亮度值。
为了生成新的渐变色,我采用了用户指定的颜色并通过上面计算出的合适的色调偏移来调整其色调,然后将其饱和度和光度值设置为上面确定的值。
http://en.wikipedia.org/wiki/HSL_and_HSV提供RGB-HSL公式。 http://blogs.msdn.com/b/cjacks/archive/2006/04/12/575476.aspx描述了如何进行HSL到RGB的转换。