NET问答: 如何将十六进制的 #FFDFD991 转成 C# 中的 Color 类?

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NET问答: 如何将十六进制的 #FFDFD991 转成 C# 中的 Color 类?相关的知识,希望对你有一定的参考价值。

咨询区

  • viky

请问如何将一个16进制的 color code 转成 C# 中的 Color ?

我的业务场景中需要从文件读取一个 hex color code,然后我需要将该 code 转成 System.Windows.Media.Color 实例,不知道 .NET Framework 中是否有相关的支持类?

回答区

  • Thorarin

从你提供的 color code 看,它是一个 ARGB 值,你可以将其转成 System.Drawing.ColorSystem.Windows.Media.Color,参考如下代码:


using System.Windows.Media;

Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");

如果你不想使用 ColorTranslator ,我还有一种简单的方式。


string colorcode = "#FFFFFF00";
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);

或者你也可以每2个2个的截取来提取颜色值。


string colorcode = "#FFFFFF00";    
colorcode = colorcode.TrimStart('#');

Color col; // from System.Drawing or System.Windows.Media
if (colorcode.Length == 6)
    col = Color.FromArgb(255, // hardcoded opaque
                int.Parse(colorcode.Substring(0,2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(2,2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(4,2), NumberStyles.HexNumber));
else // assuming length of 8
    col = Color.FromArgb(
                int.Parse(colorcode.Substring(0, 2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(2, 2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(4, 2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(6, 2), NumberStyles.HexNumber));

  • Oded

如果你的 color code 是类似 html 中的 rgb 值,可以借助基础类库的 ColorTranslator 类,比如:


System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66");

当然,如果你是 ARGB 的话,得需要用 WPF 下的 ColorConverter 类。


Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;

  • Jink

我封装了一个简单粗暴的扩展方法。


static class ExtensionMethods
{
    public static Color ToColor(this uint argb)
    {
        return Color.FromArgb((byte)((argb & -16777216)>> 0x18),      
                              (byte)((argb & 0xff0000)>> 0x10),   
                              (byte)((argb & 0xff00) >> 8),
                              (byte)(argb & 0xff));
    }
}

接下来可以这么用。


Color color = 0xFFDFD991.ToColor();

点评区

几位大佬提供的几种方法都非常灵活,????????,学习了,收藏了!

以上是关于NET问答: 如何将十六进制的 #FFDFD991 转成 C# 中的 Color 类?的主要内容,如果未能解决你的问题,请参考以下文章

NET问答: 如何取消或中止 Task 执行 ?

NET问答: 如何集中化统一验证 Authorization

NET问答: 如何从 event 中移除所有的 handler ?

NET问答: 如何使用 C# 比较两个 byte[] 的相等性 ?

如何在 Casio fx-991ES 计算器中计算 Mod b

NET问答: 如何让 HttpClient 支持 Http 2.0 协议?