在C#中将颜色名称转换为十六进制

时间:2016-08-25 05:41:52

标签: c# .net

我编写了一个程序来从ColorDialogBox中获取Color并使用ColorTranslator.ToHtml将其转换为Hex值但是它不返回Hex值而是返回纯色名称。有任何解决这个问题的方法吗 ?

这是我的代码:

   private void chooseClr_Click(object sender, EventArgs e) {

      colorDialog1.ShowDialog();
      Color checking = colorDialog1.Color;
      string hexColor = ColorTranslator.ToHtml(checking);
      MessageBox.Show(hexColor);
    }

2 个答案:

答案 0 :(得分:0)

如果它是有效的HTML颜色,则返回纯色名称 如果您的颜色是自定义的(没有HTML名称),则返回HEX值。

就我而言,最快最简单的解决方案是编写自定义函数:

public static class HexColorExtensions
{
    public static string ToHex(this Color c) => $"#{c.R:X2}{c.G:X2}{c.B:X2}";
}

现在,你可以这样简单地使用它:

Console.WriteLine(Color.Green.ToHex()); // #008000
Console.WriteLine(Color.Black.ToHex()); // #000000
Console.WriteLine(Color.FromArgb(1, 2, 3).ToHex()); // #010203

答案 1 :(得分:0)

这会将颜色转换为十六进制字符串

MessageBox.Show((colorDialog1.Color.ToArgb() & 0x00FFFFFF).ToString("X6"));