Сцинтиллярный маркерный фон выходит другого цвета, чем ожидалось - PullRequest
0 голосов
/ 15 декабря 2011

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

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

Из того, что я понимаю в документации по Scintillia, он принимает только цвета RGB, поэтому я использую следующую функцию, чтобы вырезать часть Alphaцвета.Это устанавливает цвет, но вместо синего я получаю оранжевый вместо синего.Это правильный способ установить цвет фона маркера?

       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);
    }

1 Ответ

0 голосов
/ 15 декабря 2011

Это снимает любое альфа-значение:

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 такое же цветовое представление. Может хранить значение в BGR вместо формата RGB.

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