C# 从十六进制十进制值windows应用程序获取接近或等效的颜色名称
我使用SFCOLORPALETE从用户处获取颜色输入,这会将所选颜色作为十六进制十进制颜色代码返回给我。但我需要这个颜色作为等价或准确的颜色名称,因为它将用于过滤搜索 尝试以下工作方法 以下是我的解决方案: 首先,我制作了一个定制类: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; } } 这是为了构造从中得到的已知颜
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类,请在您的项目中添加该类。请检查我的最新答案