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();

点评区

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值