2010-04-28 213 views
1

我有一個編碼爲有符號整數(OLE,我認爲)在傳統INI文件中的顏色值列表,我需要使用.NET將它轉換爲(A)RGB值。一個INI例如:如何使用.NET將遺留(OLE)顏色轉換爲(A)RGB?

[INI_Section] 
Color=-2147483633 

做這樣的事情:

Color.FromArgb(-2147483633) 

給出了一個顏色,是不是在所有我所期望的阿爾法混合版本。我認爲像-2147483633這樣的值應該表示一個系統定義的,或者像ButtonFace這樣的命名顏色。有沒有.NET方法來正確翻譯這些傳統顏色?請注意pEnvoke OlePro32.dll不是一個選項。

+1

你的號碼在十六進制(在Windows計算器上)以'FFFFFFFF8000000F'出現 - 你知道什麼顏色的數字(或實際上你有任何數字)應該代表? – ChrisF 2010-04-28 19:06:27

+0

@ChrisF:使用DWord,而不是QWord ...值是'8000000F',在ARGB中,它是一個部分透明的白色,只有一絲藍色。也許它實際上是一個ARGB-1/10/11/10或RGBA(兩者都是粉紅色的) – 2010-04-28 19:11:06

+0

@BlueRaja - 我剛剛意識到這一點,但編輯我的評論爲時已晚:( – ChrisF 2010-04-28 19:13:01

回答

11

您可以使用ColorTranslator.FromOle進行轉換。
http://msdn.microsoft.com/en-us/library/system.drawing.colortranslator.fromole.aspx

+1

完美。謝謝 – 2010-04-28 19:57:29

+3

+1。來自文檔的更多內容「如果OLE_COLOR的高位被設置,則低位字節被視爲系統顏色索引」http://support.microsoft.com/kb/131101因此,'8000000F'確實是*按鈕面,因爲系統顏色COLOR_BTNFACE在索引15處http://msdn.microsoft.com/en-us/library/ms724371(VS.85).aspx – MarkJ 2010-04-29 08:39:16