Файл .vssettings (настройки Visual Studio) Цветовой формат - PullRequest
10 голосов
/ 04 ноября 2011

Я создаю собственную цветовую схему для возвышенного текста на основе темы Visual Studio.

В теме Visual Studio определены передний план и фон, но они не входят в стандартную тройку RGB. Я не знаю, что означает это число, и мне было интересно, как я могу преобразовать его в триплет RGB (например, #FFFFFF) для использования в Sublime Text.

Пример:

<Item Name="Comment" Foreground="0x007B7466" Background="0x02000000" BoldFont="No"/>
<Item Name="Plain Text" Foreground="0x00F3F2F1" Background="0x002A2822" BoldFont="No"/>
<Item Name="Selected Text" Foreground="0x00FFFFFF" Background="0x0064614F" BoldFont="No"/>

Я пробовал поискать здесь и в Google, но, видимо, я не могу найти правильные условия поиска, чтобы найти правильные ответы.

Ответы [ 3 ]

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

Так же, как и к вашему сведению, файл vsettings использует BGR, а не RGB

5 голосов
/ 04 ноября 2011

На первый взгляд (и с некоторыми знаниями о том, как MS любит обрабатывать цвета) они выглядят как ARGB или XRGB DWORD в шестнадцатеричной форме. Однако в зависимости от того, что вы делаете, они могут быть A / XBGR.

Скорее всего, первые два символа - альфа, затем красный, зеленый и синий. Это довольно стандартный способ размещения цветов, поскольку он аккуратно помещается в регистр памяти и сопоставляет данные текстуры для нескольких форматов.

Тем не менее, в некоторых местах нравится менять то, что соответствует другим форматам текстур. A / X остается в начале, затем синий, зеленый и красный.

Это должно быть легко проверить, предоставив 0x00FF0000. Если синий, BGR, если красный, RGB.

Возможно, что они используют первый канал / байт как что-то отличное от альфы. Упаковка данных в альфа-канал 3-канальной текстуры не является редкостью. Однако только один из цветов - 0x02 ..., все остальные - 0x00 ..., так что я бы этого не делал (там также есть цвет 3,5 байта, так что, возможно, опечатки).

Вам не нужно выполнять какие-либо преобразования с ними, поскольку они уже являются шестнадцатеричными (фактический шестнадцатеричный код, а не веб-материал #...). Чтобы «преобразовать» веб-шестнадцатеричный триплет, просто удалите # и добавьте 0x00, и все будет хорошо. Все остальные символы остаются прежними (регистр не должен иметь значения, хотя некоторым людям нравится прописная буква как процедура).

0 голосов
/ 05 марта 2019

Если кому-то нужно проанализировать цвета VSSettings, вы можете использовать этот код (используя новые API Span):

// input is like "0x008CFAF1", ABGR
var color = abgr.AsSpan();
byte blue = byte.Parse(color.Slice(4, 2), NumberStyles.AllowHexSpecifier);
byte green = byte.Parse(color.Slice(6, 2), NumberStyles.AllowHexSpecifier);
byte red = byte.Parse(color.Slice(8, 2), NumberStyles.AllowHexSpecifier);
return Color.FromRgb(red, green, blue);

Если у вас нет доступа к AsSpan(), вы можете изменить Slice операции до Substring.

...