首页 > 解决方案 > C# .NET Framework 的颜色转换?

问题描述

所以我正在尝试制作一个带有标题按钮的应用程序:“关闭、最小化、最大化/恢复”,但我似乎无法弄清楚如何将颜色的 R、G、B 值平滑地转换为另一个值。

我在 C# 中使用 Timers 非常好,但我不知道如何在转换时计算值。

到目前为止我的代码:(关闭,最小化等东西是预制的矩形)

protected override void OnMouseMove(MouseEventArgs e)
{
    base.OnMouseMove(e);
    var pos = e.Location;
    
    if (close.Contains(pos))
    {
        Timer t = new Timer { Interval = 1 };
        t.Tick += delegate (object sender_, EventArgs e_)
        {
            // transition here
        };
        t.Start();
    }
    if (!close.Contains(pos))
    {
        Timer t = new Timer { Interval = 1 };
        t.Tick += delegate (object sender_, EventArgs e_)
        {
            // "reverse" code here
        };
        t.Start();
    }
}

注意:我不是要一个完整的代码片段,只是一些数学解决方案,所以我可以轻松地做到这一点。

标签: c#.netwinformsmathcolortransform

解决方案


单击按钮时,计算您希望转换完成的时间。例如,您可能会采用当前时间并添加 1 秒。存储此值。

当计时器滴答声触发时,执行以下步骤:

  1. 计算颜色的当前值与其最终值之间的距离
  2. 计算过渡应该完成的剩余时间
  3. 将 1 除以 2。
  4. 通过 3 的结果微调颜色值。

对每个刻度重复此操作,即使某些刻度失败或最终重叠,您也应该始终按时击中最终颜色。


推荐阅读