Файл.vssettings (настройки Visual Studio) Цветовой формат

Я создаю свою собственную цветовую схему для возвышенного текста на основе темы 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, но, очевидно, я не могу найти правильные условия поиска, чтобы найти правильные ответы.

2 ответа

Решение

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

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

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

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

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

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

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

Если кому-то нужно проанализировать цвета 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,

Другие вопросы по тегам