繁体   English   中英

System.Drawing.Color转换FromArgb问题

[英]System.Drawing.Color convert FromArgb issue

我将颜色保存为int值。

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

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

我需要得到一个-红色属性,而不是十六进制值

尝试这个

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

你没做错什么

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

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

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

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

对,那是正确的。 这就是Color.Name属性的工作方式。 根据文档

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

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

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

您混合了已知的颜色和只是颜色。 当您将已知颜色转换为int并将其转换回颜色时,您会失去名称。 您必须这样做:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM