2011-12-15 54 views
0

我正在嘗試爲記事本++插件設置Markerbackgrounds我正在寫這樣某些行可以突出顯示。顏色被存儲爲從Color.ToArgb()轉換整數:Scintillia標記背景出現不同於預期的顏色

int colour = Convert.ToInt32(Color.LightSkyBlue.ToArgb()) 

從我明白了Scintillia文檔它只接受RGB顏色的,所以我使用下面的函數,以汽提出的阿爾法部顏色。這確實設置了顏色,但不是藍色,而是變成橙色而不是藍色。這是設置標記背景顏色的正確方法嗎?

 private static void DefineColor(int type, int colour) 
    { 
     string hexValue = colour.ToString("X"); 
     hexValue = hexValue.Remove(0, 2); 

     //hexValue = "0x" + hexValue 

     int decValue = Convert.ToInt32(ColorTranslator.FromHtml(hexValue)); 
     //int decValue = int.Parse("FF", System.Globalization.NumberStyles.AllowHexSpecifier); 

     Win32.SendMessage(PluginBase.nppData._scintillaMainHandle, SciMsg.SCI_MARKERDEFINE, type, (int)SciMsg.SC_MARK_BACKGROUND); 
     Win32.SendMessage(PluginBase.nppData._scintillaMainHandle, SciMsg.SCI_MARKERSETBACK, type, decValue); 
     Win32.SendMessage(PluginBase.nppData._scintillaMainHandle, SciMsg.SCI_MARKERSETFORE, type, 0); 
    } 

回答

0

這剝掉任何α值:

var colorOnly = Color.FromArgb(c.R, c.G, c.B); 

此顏色轉換爲一個整數值:

int i = c.ToArgb(); 

兩者一起:

int i = Color.FromArgb(c.R, c.G, c.B).ToArgb(); 

但我不不知道,如果Scintillia使用相同的col或表示。可以將值存儲在BGR中而不是RGB格式。

int bgr = (c.B * 256 + c.G) * 256 + c.R; 
+0

非常感謝。 Scintillia確實使用BGR來表示它的顏色而不是RGB,這就是我出錯的地方。 – Kithis 2011-12-16 09:40:27