如何将十六进制颜色值转换为人类可读的字符串表示?

时间:2014-11-30 18:42:57

标签: c# colors windows-store-apps hex solidcolorbrush

我希望将颜色十六进制值(例如"#FFFF1493")存储为"人性化的"名称(例如" DeepPink")。

在SLaks和nvoigt here的帮助下,我现在得到了这段代码:

if (sender is Canvas)
{
    var canvas = sender as Canvas;
    var brush = canvas.Background as SolidColorBrush;
    var color = brush.Color;
    String brushColorAsStr = color.ToString();

    IAppSettings appSettings;
    if (App.SaveSettingsLocally)
    {
        appSettings = new AppSettingLocal();
    }
    else
    {
        appSettings = new AppSettingsRemote();
    }
    appSettings.SaveSetting(VisitsConsts.APP_BAR_COLOR_SETTING, brushColorAsStr);
}

...但是brushColorAsStr中的值是" #FFFF1493 " (当我单击DeepPink画布控件时),并且我的代码不能根据所选颜色更改应用栏颜色:

String brushColor = appSettings.GetSetting(VisitsConsts.APP_BAR_COLOR_SETTING);
if (null == brushColor) return;

if (brushColor.Equals("Blue"))
{
    CmdBar.Background = new SolidColorBrush(Colors.Blue);
}
else if (brushColor.Equals("Aqua"))
. . .

here我得到了以下建议:

Color colour = (Color)ColorConverter.ConvertFromString(brushColorAsStr);
System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml(brushColorAsStr);

...但" ColorConverter "和" 绘图"在我的应用程序中无法解析。如何从十六进制颜色中获取人类可读的名称?

2 个答案:

答案 0 :(得分:3)

没有从数字到名称的映射,但Colors类从名称映射到数字。您可以使用反射来构建反向映射。

有关示例代码,请参阅此前一个答案: How to convert a Windows.UI.Color into a string color name in a Windows Universal app

答案 1 :(得分:1)