C# 根据角度获取颜色带

原理:HSL色盘

HSL的H是色相,色相按角度分布如下,我们只需要根据角度取HSLB然后转RGB即可
在这里插入图片描述

代码

使用了System.Drawing.Color

        /// <summary>
        /// 根据温度返回颜色
        /// </summary>
        /// <param name="temp">传入的温度的权重</param>
        /// <param name="maxTemp">最大温度</param>
        /// <param name="minTemp">最小温度</param>
        /// <returns></returns>
        private static Color GetFromTempToColor(double temp, double maxTemp, double minTemp)
        {
            double ratio = (temp - minTemp) / (maxTemp - minTemp);//根据温度的权重计算一个比例
            double hue = 270 - ratio * 270;//计算色
            var color = HSLToColor(hue, 1, 0.6);
            return color;
        }

        /// <summary>
        /// HSL转RGB
        /// </summary>
        /// <param name="hue">色向</param>
        /// <param name="saturation">饱和度</param>
        /// <param name="lightness">亮度</param>
        /// <returns></returns>
        private static Color HSLToColor(double hue, double saturation, double lightness)
        {
            // 转换 HSL 到 RGB
            double c = (1 - Math.Abs(2 * lightness - 1)) * saturation;
            double x = c * (1 - Math.Abs((hue / 60) % 2 - 1));
            double m = lightness - c / 2;

            double red = 0, green = 0, blue = 0;

            if (hue >= 0 && hue < 60)
            {
                red = c;
                green = x;
            }
            else if (hue >= 60 && hue < 120)
            {
                red = x;
                green = c;
            }
            else if (hue >= 120 && hue < 180)
            {
                green = c;
                blue = x;
            }
            else if (hue >= 180 && hue < 240)
            {
                green = x;
                blue = c;
            }
            else if (hue >= 240 && hue < 300)
            {
                red = x;
                blue = c;
            }
            else if (hue >= 300 && hue < 360)
            {
                red = c;
                blue = x;
            }

            // 转换 RGB 到 Color
            byte r = (byte)((red + m) * 255);
            byte g = (byte)((green + m) * 255);
            byte b = (byte)((blue + m) * 255);

            return Color.FromArgb(r, g, b);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YUE ZHEN PENG

码字不易,如果你想请我喝杯果汁

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值