using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DroneClient.utils { static class UtilityUI { public static Color ColorFromHsb(float hue, float saturation, float brightness) { // Ограничиваем значения параметров hue = Math.Clamp(hue, 0, 360); saturation = Math.Clamp(saturation, 0, 1); brightness = Math.Clamp(brightness, 0, 1); float c = brightness * saturation; float x = c * (1 - Math.Abs((hue / 60) % 2 - 1)); float m = brightness - c; float r, g, b; if (hue < 60) { r = c; g = x; b = 0; } else if (hue < 120) { r = x; g = c; b = 0; } else if (hue < 180) { r = 0; g = c; b = x; } else if (hue < 240) { r = 0; g = x; b = c; } else if (hue < 300) { r = x; g = 0; b = c; } else { r = c; g = 0; b = x; } return Color.FromArgb( (int)((r + m) * 255), (int)((g + m) * 255), (int)((b + m) * 255)); } public static void ColorToHsb(Color color, out float hue, out float saturation, out float brightness) { float r = color.R / 255f; float g = color.G / 255f; float b = color.B / 255f; float max = Math.Max(r, Math.Max(g, b)); float min = Math.Min(r, Math.Min(g, b)); float delta = max - min; // Hue calculation if (delta == 0) { hue = 0; } else if (max == r) { hue = 60 * (((g - b) / delta) % 6); } else if (max == g) { hue = 60 * (((b - r) / delta) + 2); } else { hue = 60 * (((r - g) / delta) + 4); } if (hue < 0) hue += 360; // Saturation calculation saturation = max == 0 ? 0 : delta / max; // Brightness/Value brightness = max; } } }