You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 中如何根据 Hex 颜色值判断其所属的基础色彩类别

C#实现Hex颜色归类到指定基础色彩的方案

核心思路是将Hex转换为HSL(色相、饱和度、亮度)色彩空间后通过色相区间判定,比直接比对RGB数值准确率高很多。

步骤说明

  • 第一步:将输入的Hex字符串转换为RGB结构,C#内置的ColorTranslator.FromHtml()可以直接处理带#前缀的3位/6位Hex格式,无需自行解析字符串。
  • 第二步:提取颜色的HSL属性,通过饱和度和亮度先过滤黑白灰等无彩色,避免这类颜色被误分到有色分类中。
  • 第三步:根据色相(Hue,取值范围0-360°)的区间匹配对应的基础色彩。

可直接使用的代码示例

首先需引用命名空间,.NET Framework原生自带System.Drawing,.NET Core/.NET 5+需要先通过Nuget安装System.Drawing.Common包:

using System;
using System.Drawing;

// 定义基础色彩枚举
public enum BaseColor
{
    Red,
    Green,
    Yellow,
    Pink,
    Orange,
    Blue,
    None // 匹配不到的颜色,含黑白灰、非法输入
}

public static class ColorClassifier
{
    public static BaseColor ClassifyHex(string hexColor)
    {
        try
        {
            Color targetColor = ColorTranslator.FromHtml(hexColor);
            
            // 获取HSL值:Hue 0-360,饱和度和亮度取值均为0-1
            float hue = targetColor.GetHue();
            float saturation = targetColor.GetSaturation();
            float brightness = targetColor.GetBrightness();

            // 过滤低饱和、过暗、过亮的无彩色
            if (saturation < 0.15f || brightness < 0.15f || brightness > 0.95f)
            {
                return BaseColor.None;
            }

            // 色相区间匹配,可根据实际需求调整区间边界
            return hue switch
            {
                >= 0 and < 15 => BaseColor.Red,
                >= 15 and < 45 => BaseColor.Orange,
                >= 45 and < 75 => BaseColor.Yellow,
                >= 75 and < 165 => BaseColor.Green,
                >= 210 and < 270 => BaseColor.Blue,
                >= 300 and < 345 => BaseColor.Pink,
                >= 345 and <= 360 => BaseColor.Red,
                _ => BaseColor.None
            };
        }
        catch (ArgumentException)
        {
            // 输入Hex格式非法的情况
            return BaseColor.None;
        }
    }
}

可调整项说明

  • 色相区间可以根据你的分类偏好微调,比如要把偏橙的红色归到红色类,就把红色的区间上限从15调到20即可。
  • 饱和度、亮度的阈值也可以根据需求修改,阈值越高对彩色的判定越严格。
  • 如果需要跨平台运行不想依赖System.Drawing.Common,可以自行实现Hex转RGB、RGB转HSL的逻辑,区间判定部分完全通用。

内容的提问来源于stack exchange,提问作者user581157

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:24:03