System.Drawing.Color转换FromArgb问题

本文关键字:FromArgb 问题 转换 Color Drawing System | 更新日期: 2023-09-27 18:24:04

我将我的颜色保存在数据库的int值中。

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

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

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

System.Drawing.Color转换FromArgb问题

试试这个

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

你没有做错什么。

十六进制的ff等于255,这是Red颜色的十进制值,由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();