$ cat truecolor-v-konsoli-windows.md
Truecolor в консоли Windows без нейронок
черновик · текст набросал Claude по моему коду, перепишу сам
В 2023 я делал текстовую игру 3004025 прямо в консоли и хотел, чтобы текст можно было приглушать: тусклые воспоминания, яркие крики. Но Console.ForegroundColor в .NET знает только 16 цветов, и никакой «яркости» там нет.
Включить ANSI
Консоль Windows умеет понимать ANSI-последовательности, но эту возможность нужно включить флагом ENABLE_VIRTUAL_TERMINAL_PROCESSING через WinAPI.
var handle = GetStdHandle(-11);
GetConsoleMode(handle, out int mode);
SetConsoleMode(handle, mode | 0x4); // ENABLE_VIRTUAL_TERMINAL_PROCESSING
Яркость одним множителем
После этого цвет можно задавать 24-битной последовательностью \x1b[38;2;R;G;Bm. Если умножить каждый канал на один коэффициент, яркость всего текста меняется одним числом. Попробуй сам:
красный · зелёный · синий ·белый — «Ночь, 5:22 по стандартному циклу.»
\x1b[38;2;204;204;204mpublic static void ReloadTextColors()
{
textColorFactor = Math.Round(textColorFactor, 1);
textColorWhite = "\x1b[38;2;" + Convert.ToInt32(255 * textColorFactor) + ";" + ...;
}