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)
| 归档时间: |
|
| 查看次数: |
5243 次 |
| 最近记录: |