這些數字存儲在數據庫中。他們起源於Delphi代碼。雖然我認爲他們遵循某種標準。我曾嘗試Color.FromArgb(255);
但我知道一個事實,首先是紅色(在Delphi側),其中在ASP.NET它認爲它的藍色Color [A=0, R=0, G=0, B=255]
我想這些數字爲十六進制反正。即#000000,#FFFF99等等
任何人都知道如何將這些整數(請參閱DB圖片)轉換爲十六進制。
這些數字存儲在數據庫中。他們起源於Delphi代碼。雖然我認爲他們遵循某種標準。我曾嘗試Color.FromArgb(255);
但我知道一個事實,首先是紅色(在Delphi側),其中在ASP.NET它認爲它的藍色Color [A=0, R=0, G=0, B=255]
我想這些數字爲十六進制反正。即#000000,#FFFF99等等
任何人都知道如何將這些整數(請參閱DB圖片)轉換爲十六進制。
德爾福顏色(TColor
)是XXBBGGRR
當不是從調色板或特殊顏色。
有關格式(和其他特殊情況)的更多詳細信息,請參閱this article。由Christian.K指出的The article也包含一些關於特例的細節。
要轉換成你應該使用類似標準顏色:
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);
}
對於系統顏色(數據庫中的負值),它們只是窗口consta nts被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 values基10表示。
德爾福本身似乎提供了一些幫助函數(例如GetRValue
)來提取相應的讀取,綠色和藍色值。你必須自己寫一些類似於C#的東西。
具有可以將它們組合爲十六進制字符串的值。
string.Format("#{0:X2}{1:X2}{2:X2}", redComponent, greenComponent, blueComponent);
只是將整數值轉換爲一個十六進制字符串,不管是否填充,都很可能不會做正確的事情。
更新作爲評論員James L.指出,組件的順序在delphi中實際上是不同的。要生成TColor
樣值的順序必須是:
string.Format("#{0:X2}{1:X2}{2:X2}", blueComponent, greenComponent, redComponent);
我認爲你的訂單是倒退的。紅色應該是#0000FF,綠色應該是#00FF00,藍色應該是#FF0000。所以你的顏色順序應該改成藍綠紅。 –
到系統的顏色轉換爲RGB,最好的辦法是做像VCL一樣。調用['GetSysColor()'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms724371(v = vs.85)。aspx)傳遞'c&0x000000FF'。換句話說,這些不是VCL定義的,它們是* system *定義的。 –
@David,在你的評論中,你提供了確切的答案,不要將它作爲答案發布嗎? –
@PA。評論只是答案的一小部分。我希望VirtualBlackFox將這個建議融入到這個答案中,因此能夠刪除相當長和煩人的列表。 –