System.Drawing.Color转换FromArgb问题

时间:2012-02-09 08:01:45

标签: c# .net colors

我将db中的颜色保存为int值。

int icolor = System.Drawing.Color.Red.ToArgb();
//result: -65536

将int转换为Color而不是丢失属性Color.Name。必须返回"红色"但财产归还" ff000000"。我在做什么争吵?

我需要得到这个 - 属性红色但不是十六进制值

4 个答案:

答案 0 :(得分:7)

试试这个

System.Drawing.ColorTranslator.FromHtml("#" + "Hex value").Name

答案 1 :(得分:3)

你没有做错任何事。

十六进制中的

ff等于255,这是Red颜色的十进制值,由...返回 System.Drawing.Color.Red.ToArgb();

如果您想获取颜色的名称,请使用System.Drawing.Color.Red.Name

string sRedColorName = System.Drawing.Color.Red.Name;

答案 2 :(得分:2)

  

将int转换为Color而不是丢失属性Color.Name。

是的,这是正确的。这就是Color.Name属性的工作原理。根据{{​​3}}:

  

此方法返回用户定义的颜色名称(如果颜色是从名称创建的)或已知颜色的名称。对于自定义颜色,将返回RGB值。

因此,您要从整数(RGB)值创建Color对象 - 而不是其名称 - Color结构不会将其识别为命名颜色。

此信息不是在运行时通过迭代包含所有已知颜色及其RGB值的地图动态确定的,而是在创建Color对象时存储在私有标记字段中。在将颜色信息作为整数序列化到数据库的过程中,您将丢失该信息。

答案 3 :(得分:0)

你混合了已知的颜色和颜色。将已知颜色转换为int并将其转换回颜色时,将丢失名称。你必须这样做:

 int icolor = System.Drawing.Color.Red.ToArgb();

 Color knownColor = System.Drawing.Color.FromArgb(icolor).ToKnownColor();