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

Doo*_*ght 5 c# delphi hex colors

在此输入图像描述

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

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

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

任何人都知道如何将这些整数(见DB图片)转换为十六进制.

Jul*_*lia 20

Delphi colors(TColor)XXBBGGRR不是来自调色板或特殊颜色.

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

标准颜色

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

var color = Color.FromArgb(0xFF, c & 0xFF, (c >> 8) & 0xFF, (c >> 16) & 0xFF);
Run Code Online (Sandbox Code Playgroud)

要转换为十六进制,:

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

系统颜色

对于系统颜色(数据库中的负值),它们只是被屏蔽的窗口常量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));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 将系统颜色转换为RGB的最佳方法是像VCL一样.调用[`GetSysColor()`](http://msdn.microsoft.com/en-us/library/windows/desktop/ms724371(v = vs.85).aspx)传递`c&0x000000FF`.换句话说,这些不是VCL定义的,它们是*system*定义的. (6认同)
  • @DavidHeffernan我没有意识到只是将Windows常量转换为TColor,非常感谢,我会将它添加到我的答案中. (4认同)