我正在尝试使颜色褪色,让我们说 YellowWhite 一段时间。我已经计算好了计时器,并且我也很好地应用了新颜色,但是淡入淡出并不平滑 (例如,它在到达 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%,但我只是不知道这对代码意味着什么。

最佳答案

这是一个可能有效的想法。

不要在红-绿-蓝空间中进行数学计算。而是将您的颜色视为具有三个组成部分:

  • Hue(是红色、橙色、黄色、绿色、蓝色、紫色等),
  • 饱和度(颜色有多浓?)
  • 值(颜色中有多少黑度?)

  • 有将 RGB 转换为 HSV 的算法;查查他们。这是一个很好的起点:

    http://en.wikipedia.org/wiki/HSL_and_HSV

    现在,当您从一种颜色淡入另一种颜色时,请沿着 HSV 轴而不是沿着 RGB 轴采取步骤。

    关于c# - 褪色的正确数学方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16678185/

    10-14 19:31