C#将delphi TColor转换为颜色(Hex)

在此处输入图像描述

这些数字存储在数据库中。 它们起源于Delphi代码。 虽然我认为他们遵循某种标准。 我试过Color.FromArgb(255);

但我知道第一个是RED(在delphi方面),在ASP.NET中,它认为它的蓝色Color [A=0, R=0, G=0, B=255]

无论如何,我希望这些数字成为Hexidecimal。 即#000000,#FFFF99等等

任何人都知道如何将这些整数(参见DB图片)转换为hex。

当不是调色板或特殊颜色时,Delphi颜色( TColor )是XXBBGGRR

有关格式(和其他特殊情况)的更多详细信息,请参阅此文章 。 Christian.K指出的文章也包含了一些特殊案例的细节。

标准颜色

要转换为标准颜色,您应该使用以下内容:

 var color = Color.FromArgb(0xFF, c & 0xFF, (c >> 8) & 0xFF, (c >> 16) & 0xFF); 

要转换为hex,:

 string ColorToHex(Color color) { return string.Format("#{0:X2}{1:X2}{2:X2}", color.R, color.G, color.B); } 

系统颜色

对于系统颜色(数据库中的负值),它们只是由0x80000000屏蔽的窗口常量。

感谢David Heffernan提供的信息。

示例代码

 Color DelphiColorToColor(uint delphiColor) { switch((delphiColor >> 24) & 0xFF) { case 0x01: // Indexed case 0xFF: // Error return Color.Transparent; case 0x80: // System return Color.FromKnownColor((KnownColor)(delphiColor & 0xFFFFFF)); default: var r = (int)(delphiColor & 0xFF); var g = (int)((delphiColor >> 8) & 0xFF); var b = (int)((delphiColor >> 16) & 0xFF); return Color.FromArgb(r, g, b); } } void Main() { unchecked { Console.WriteLine(DelphiColorToColor((uint)(-2147483646))); Console.WriteLine(DelphiColorToColor( (uint)KnownColor.ActiveCaption | 0x80000000 )); Console.WriteLine(DelphiColorToColor(0x00FF8000)); } } 

看起来这些数字是Delphi TColor值的基数10表示。

Delphi本身似乎提供了一些辅助函数(例如GetRValue )来提取相应的读取,绿色和蓝色值。 你必须在c#中自己编写类似的东西。

拥有这些值可以将它们组合成hex字符串。

 string.Format("#{0:X2}{1:X2}{2:X2}", redComponent, greenComponent, blueComponent); 

简单地将整数值转换为hex字符串,填充或不填充,很可能不会做正确的事情。

作为评论者的更新 ,James L.指出,组件的顺序实际上与/在delphi中是不同的。 要生成类似TColor的值,顺序必须是:

 string.Format("#{0:X2}{1:X2}{2:X2}", blueComponent, greenComponent, redComponent);