【问题标题】:System.Drawing.Color convert FromArgb issueSystem.Drawing.Color 转换 FromArgb 问题
【发布时间】:2012-02-09 08:01:45
【问题描述】:

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

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

当将 int 转换为 Color 时,会丢失属性 Color.Name。必须返回“Red”,但属性返回“ff000000”。我在做什么?

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

【问题讨论】:

标签: c# .net colors


【解决方案1】:

试试这个

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

【讨论】:

    【解决方案2】:

    你没有做错任何事。

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

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

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

    【讨论】:

    • @user571874 如答案所述,您可以使用System.Drawing.Color.Red.Name
    【解决方案3】:

    当将 int 转换为 Color 时,会丢失属性 Color.Name。

    是的,没错。这就是Color.Name 属性的工作方式。根据the documentation

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

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

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

    【讨论】:

      【解决方案4】:

      你把已知的颜色和颜色混在一起了。当您将已知颜色转换为 int 并将其转换回颜色时,您会丢失名称。你必须这样做:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-04
        • 2016-02-19
        • 2011-05-05
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多