C#中怎么实现将RGB值转化为对应的颜色名称

2024-12-23 05:25:44
推荐回答(3个)
回答1:

// 看看这样行不行

    [STAThread]
    public static void Main(string[] args)
    {
        var argbColor = Color.FromArgb(255, 255, 0, 0);

        var colorName = FindColorName(argbColor);
        if (string.IsNullOrEmpty(colorName))
            Console.WriteLine("未找到");
        else
            Console.WriteLine(colorName);

        Console.ReadKey();
    }

    private static string FindColorName(Color argbColor)
    {
        var propertyInfos = typeof (Color).GetProperties(BindingFlags.Public | BindingFlags.Static);
        foreach (var propertyInfo in propertyInfos)
        {
            if (!propertyInfo.CanRead)
                continue;

            var value = propertyInfo.GetValue(null, null);
            if (!(value is Color))
                continue;

            if (((Color) value).ToArgb() == argbColor.ToArgb())
                return propertyInfo.Name;
        }

        return null;
    }

回答2:

Color.Name只能为已知颜色,并不能表示所有的颜色,所以你只能自己构造一个对比的方法

回答3:

没有什么好的办法获取yellow这个字符串,因为system.drawing.color是个结构体,没法FOREACH循环。
建议楼主建立一个hashtable存储“颜色名”,“rgb数值”.之后对RGB值进行foreach匹配。