是C#.NET Framework的颜色转换?

问题描述

所以我试图制作一个带有字幕按钮的应用程序:“关闭,最小化,最大化/还原”,但是我似乎无法弄清楚如何将颜色的R,G,B值转换为另一种一个顺利。

我对C#中的Timers有了很好的了解,但是我不知道转换时如何计算值。

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

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();
    }
}

注意:我不是在寻求完整的代码片段 ,只是一些数学解决方案,因此我可以轻松做到这一点。

解决方法

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

触发计时器刻度时,请执行以下步骤:

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

为每个刻度重复此操作,即使某些刻度失败或最终重叠,也应始终按时打上最终颜色。