c# - 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();
}
}
注意:我不是要一个完整的代码片段,只是一些数学解决方案,所以我可以轻松地做到这一点。
解决方案
单击按钮时,计算您希望转换完成的时间。例如,您可能会采用当前时间并添加 1 秒。存储此值。
当计时器滴答声触发时,执行以下步骤:
- 计算颜色的当前值与其最终值之间的距离
- 计算过渡应该完成的剩余时间
- 将 1 除以 2。
- 通过 3 的结果微调颜色值。
对每个刻度重复此操作,即使某些刻度失败或最终重叠,您也应该始终按时击中最终颜色。
推荐阅读
- java - Java 和 GlassFish 部署错误:项目当前已归档部署
- android - React Native Firebase 数据库中的 SyntaxError 异常
- python - 从字符串中删除连续元音
- javascript - 为什么我不能在 render 方法中使用 2 个 JSX 标签?
- javascript - 在一分钟的时间间隔内将函数调用限制为最多 15 次
- powerbi - 如何使用 Power Bi 中的 Power Query 编辑器从选择两列的不同值中创建新列
- android - 当尝试更新我的应用程序时出现错误:失败 INSTALL_FAILED_UPDATE_INCOMPATIBLE
- android - 在开发中使用 minifyEnabled=true 是不行的;]
- javascript - 根据效果中的验证,取消ngrx 效果服务调用的更好方法是什么?
- c# - 如何修复“发生一个或多个错误。(无法建立 SSL 连接,请参阅内部异常。)'?