C# 将 delphi TColor 转换为颜色(十六进制)

标签 c# delphi colors hex

enter image description here

这些数字存储在数据库中。它们源自 Delphi 代码。尽管我假设他们遵循某种标准。我试过 Color.FromArgb(255);

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

无论如何我都想将这些数字转换为十六进制。 IE。 #000000 , #FFFF99 等等

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

最佳答案

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

参见 this article有关格式的更多详细信息(和其他特殊情况)。 The article指向 Christian.K还包含有关特殊情况的一些详细信息。

标准颜色

要转换为标准颜色,您应该使用类似的东西:

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

要转换为十六进制,:

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));
    }
}

关于C# 将 delphi TColor 转换为颜色(十六进制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8314672/

相关文章:

c# - 打开和修改 Word 文档

c# - 使用 EF4 的循环引用

c# - 从 Azure WebJob 运行 Python 脚本

delphi - 调用子类非虚方法或设置子类属性

多线程和 MessageDlgPos

matlab - 告诉 MATLAB 不要更新特定绘图的下一个默认颜色

html - 基于渐变色标为许多 css 类定义颜色

c# - 在 WinForms 桌面应用程序中使用 jQuery?

sql-server - 为什么只有部分用户收到错误 : "Connection is busy with results for another command"

ios - 绘图颜色总是错误