improve:启动动画

This commit is contained in:
2025-10-02 02:44:45 +08:00
parent b1aec69e98
commit a8a3164ee7
+116
View File
@@ -99,6 +99,9 @@ namespace Ink_Canvas.Windows
{
Dispatcher.Invoke(() =>
{
// 设置进度条颜色
SetProgressBarColor();
// 获取进度条容器的实际宽度
double containerWidth = ProgressBarBackground.ActualWidth;
if (containerWidth <= 0)
@@ -410,5 +413,118 @@ namespace Ink_Canvas.Windows
return "ICC Horse.png";
}
}
/// <summary>
/// 根据实际样式设置进度条颜色
/// </summary>
private void SetProgressBarColor()
{
Color progressColor;
switch (_actualSplashStyle)
{
case 2: // 春季 - H=136, S=15, L=22
progressColor = HslToRgb(136, 15, 22);
break;
case 3: // 夏季 - H=6, S=15, L=22
progressColor = HslToRgb(6, 15, 22);
break;
case 4: // 秋季 - H=39, S=15, L=22
progressColor = HslToRgb(39, 15, 22);
break;
case 5: // 冬季 - H=204, S=15, L=22
progressColor = HslToRgb(204, 15, 22);
break;
case 6: // 马年限定 - 白色
progressColor = Colors.White;
break;
default: // 默认使用
progressColor = Colors.White;
break;
}
// 创建渐变画刷
var gradientBrush = new LinearGradientBrush
{
StartPoint = new System.Windows.Point(0, 0),
EndPoint = new System.Windows.Point(1, 0)
};
// 根据颜色类型设置渐变
if (_actualSplashStyle == 6) // 马年限定使用白色渐变
{
gradientBrush.GradientStops.Add(new GradientStop(Colors.White, 0));
gradientBrush.GradientStops.Add(new GradientStop(Color.FromArgb(200, 255, 255, 255), 0.5));
gradientBrush.GradientStops.Add(new GradientStop(Color.FromArgb(150, 255, 255, 255), 1));
}
else // 其他样式使用HSL颜色的渐变
{
var lighterColor = Color.FromArgb(255,
(byte)Math.Min(255, progressColor.R + 30),
(byte)Math.Min(255, progressColor.G + 30),
(byte)Math.Min(255, progressColor.B + 30));
var darkerColor = Color.FromArgb(255,
(byte)Math.Max(0, progressColor.R - 30),
(byte)Math.Max(0, progressColor.G - 30),
(byte)Math.Max(0, progressColor.B - 30));
gradientBrush.GradientStops.Add(new GradientStop(lighterColor, 0));
gradientBrush.GradientStops.Add(new GradientStop(progressColor, 0.5));
gradientBrush.GradientStops.Add(new GradientStop(darkerColor, 1));
}
ProgressBarFill.Background = gradientBrush;
}
/// <summary>
/// 将HSL颜色转换为RGB颜色
/// </summary>
/// <param name="h">色相 (0-360)</param>
/// <param name="s">饱和度 (0-100)</param>
/// <param name="l">亮度 (0-100)</param>
/// <returns>RGB颜色</returns>
private Color HslToRgb(double h, double s, double l)
{
// 将HSL值转换为0-1范围
h = h / 360.0;
s = s / 100.0;
l = l / 100.0;
double r, g, b;
if (s == 0)
{
// 无饱和度,为灰度
r = g = b = l;
}
else
{
double q = l < 0.5 ? l * (1 + s) : l + s - l * s;
double p = 2 * l - q;
r = HueToRgb(p, q, h + 1.0 / 3.0);
g = HueToRgb(p, q, h);
b = HueToRgb(p, q, h - 1.0 / 3.0);
}
return Color.FromRgb(
(byte)Math.Round(r * 255),
(byte)Math.Round(g * 255),
(byte)Math.Round(b * 255)
);
}
/// <summary>
/// HSL颜色转换辅助方法
/// </summary>
private double HueToRgb(double p, double q, double t)
{
if (t < 0) t += 1;
if (t > 1) t -= 1;
if (t < 1.0 / 6.0) return p + (q - p) * 6 * t;
if (t < 1.0 / 2.0) return q;
if (t < 2.0 / 3.0) return p + (q - p) * (2.0 / 3.0 - t) * 6;
return p;
}
}
}