C# 从十六进制十进制值windows应用程序获取接近或等效的颜色名称

C# 从十六进制十进制值windows应用程序获取接近或等效的颜色名称,c#,colors,windows-phone-8.1,win-universal-app,C#,Colors,Windows Phone 8.1,Win Universal App,我使用SFCOLORPALETE从用户处获取颜色输入,这会将所选颜色作为十六进制十进制颜色代码返回给我。但我需要这个颜色作为等价或准确的颜色名称,因为它将用于过滤搜索 尝试以下工作方法 以下是我的解决方案: 首先,我制作了一个定制类: public class ColorReference { public string Name { get; set; } public Vector3 Argb { get; set; } } 这是为了构造从中得到的已知颜

我使用SFCOLORPALETE从用户处获取颜色输入,这会将所选颜色作为十六进制十进制颜色代码返回给我。但我需要这个颜色作为等价或准确的颜色名称,因为它将用于过滤搜索

尝试以下工作方法

以下是我的解决方案:

首先,我制作了一个定制类:

public class ColorReference
{
        public string Name { get; set; }
        public Vector3 Argb { get; set; }
}
这是为了构造从中得到的已知颜色

其次,我将这些向量视为三维向量,对于单个向量,我可以根据方法得到最接近的向量。

还需要此方法从十六进制数字值中提取argb值:

public static Vector3 GetSystemDrawingColorFromHexString(string hexString)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(hexString, @"[#]([0-9]|[a-f]|[A-F]){6}\b"))
                throw new ArgumentException();
            int red = int.Parse(hexString.Substring(1, 2), NumberStyles.HexNumber);
            int green = int.Parse(hexString.Substring(3, 2), NumberStyles.HexNumber);
            int blue = int.Parse(hexString.Substring(5, 2), NumberStyles.HexNumber);
            return new Vector3(red, green, blue);
        }
屏幕截图:

从这里查看我完成的演示:

------更新日期:2016年7月26日-----

对于Windows/Phone 8.1,由于缺少Vector3类,请在项目中使用以下内容:

public class Vector3
{
    public float X { get; set; }
    public float Y { get; set; }
    public float Z { get; set; }

    public Vector3(float x, float y, float z)
    {
        X = x;
        Y = y;
        Z = z;
    }
    public static float Distance(Vector3 a, Vector3 b)
    {
        return (float)Math.Sqrt(Math.Pow(a.X - b.X, 2) + Math.Pow(a.Y - b.Y, 2) + Math.Pow(a.Z - b.Z, 2)); ;
    }
}
以下是我的解决方案:

首先,我制作了一个定制类:

public class ColorReference
{
        public string Name { get; set; }
        public Vector3 Argb { get; set; }
}
这是为了构造从中得到的已知颜色

其次,我将这些向量视为三维向量,对于单个向量,我可以根据方法得到最接近的向量。

还需要此方法从十六进制数字值中提取argb值:

public static Vector3 GetSystemDrawingColorFromHexString(string hexString)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(hexString, @"[#]([0-9]|[a-f]|[A-F]){6}\b"))
                throw new ArgumentException();
            int red = int.Parse(hexString.Substring(1, 2), NumberStyles.HexNumber);
            int green = int.Parse(hexString.Substring(3, 2), NumberStyles.HexNumber);
            int blue = int.Parse(hexString.Substring(5, 2), NumberStyles.HexNumber);
            return new Vector3(red, green, blue);
        }
屏幕截图:

从这里查看我完成的演示:

------更新日期:2016年7月26日-----

对于Windows/Phone 8.1,由于缺少Vector3类,请在项目中使用以下内容:

public class Vector3
{
    public float X { get; set; }
    public float Y { get; set; }
    public float Z { get; set; }

    public Vector3(float x, float y, float z)
    {
        X = x;
        Y = y;
        Z = z;
    }
    public static float Distance(Vector3 a, Vector3 b)
    {
        return (float)Math.Sqrt(Math.Pow(a.X - b.X, 2) + Math.Pow(a.Y - b.Y, 2) + Math.Pow(a.Z - b.Z, 2)); ;
    }
}

您需要“红色”或“深蓝色”等颜色名称吗?大约有16M种颜色(在24位RGB空间中)。不是所有人都有确切的名字…是的,我同意所有人都没有确切的名字,所以我在问题中提到的“靠近”名字为什么不在过滤UI中显示颜色(这也解决了色盲问题,有人认为他们选择了红色和蓝色,而你问的是绿色和蓝色)过滤是通过搜索框文本输入完成的,所以它不可能显示你需要的颜色名称,如“红色”或“深蓝色”?大约有16M种颜色(在24位RGB空间中)。不是所有人都有确切的名字…是的,我同意所有人都没有确切的名字,所以我在问题中提到的“靠近”名字为什么不在过滤UI中显示颜色(这也解决了色盲问题,有人认为他们选择了红色和蓝色,而你问的是绿色和蓝色)过滤是通过搜索框文本输入完成的,所以不可能表现出你的聪明!我可能永远都不需要这样做,但它为我提供了一种深刻的方式来看待颜色之间的关系。@Franklin,谢谢你的回答。我需要这个windows 8.1应用程序。似乎您的项目是针对windows 10的。对于windows 8.1,我找不到Vector3类。@MohanvelV我为windows/Phone 8.1创建了一个Vector3类,请在您的项目中添加该类。请检查我的最新答案!我可能永远都不需要这样做,但它为我提供了一种深刻的方式来看待颜色之间的关系。@Franklin,谢谢你的回答。我需要这个windows 8.1应用程序。似乎您的项目是针对windows 10的。对于windows 8.1,我找不到Vector3类。@MohanvelV我为windows/Phone 8.1创建了一个Vector3类,请在您的项目中添加该类。请检查我的最新答案