我正在尝试使颜色褪色,让我们说 Yellow
到 White
一段时间。我已经计算好了计时器,并且我也很好地应用了新颜色,但是淡入淡出并不平滑 (例如,它在到达 White
之前淡入一些奇怪的颜色,其中一些颜色比他们在“淡入淡出链”上的前身让我们称之为) 。我相信这是因为数学是错误的,但我似乎无法找到一个很好的数学示例来修改我正在做的事情。
我什至从这个问题中提取了 ColorCeiling
代码的基础知识:Fade a color to white (increasing brightness)
现在我取一种颜色,并调用一个扩展方法 Increase
:
dataGridViewResults.Rows[0].DefaultCellStyle.BackColor.Increase(50);
public static Color Increase(this Color color, byte offset)
{
return Color.FromArgb(
color.A.ColorCeiling(offset),
color.R.ColorCeiling(offset),
color.G.ColorCeiling(offset),
color.B.ColorCeiling(offset));
}
正如您所看到的,然后通过偏移量修改每种颜色并考虑到天花板以防止抛出异常。该扩展方法
ColorCeiling
如下所示:public static int ColorCeiling(this byte val, byte modifier, byte ceiling = 255)
{
return (val + modifier > ceiling) ? ceiling : val + modifier;
}
现在,我确信
ColorCeiling
是问题所在,但老实说,我找不到数学。老实说,我觉得仅仅增加 ARGB 几乎肯定是错误的方法,似乎你会说我希望你轻 50%,但我只是不知道这对代码意味着什么。 最佳答案
这是一个可能有效的想法。
不要在红-绿-蓝空间中进行数学计算。而是将您的颜色视为具有三个组成部分:
有将 RGB 转换为 HSV 的算法;查查他们。这是一个很好的起点:
http://en.wikipedia.org/wiki/HSL_and_HSV
现在,当您从一种颜色淡入另一种颜色时,请沿着 HSV 轴而不是沿着 RGB 轴采取步骤。
关于c# - 褪色的正确数学方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16678185/