我试图淡化一种颜色,让我们说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%,但就代码而言,我只是不知道这意味着什么。