2011-12-15 6 views
0

Я пытаюсь установить Markerbackgrounds для плагина notepad ++. Я пишу так, чтобы некоторые строки были выделены. Цвета хранятся в виде целых чисел, которые преобразуются из Color.ToArgb():Scintillia background background, выходящий из другого цвета, чем ожидалось

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

 Смежные вопросы

  • Нет связанных вопросов^_^