$ cat truecolor-v-konsoli-windows.md

Truecolor в консоли Windows без нейронок

2026-10-08 · #c# #winapi #3004025 · о проекте: 3004025

черновик · текст набросал Claude по моему коду, перепишу сам

В 2023 я делал текстовую игру 3004025 прямо в консоли и хотел, чтобы текст можно было приглушать: тусклые воспоминания, яркие крики. Но Console.ForegroundColor в .NET знает только 16 цветов, и никакой «яркости» там нет.

искал готовое решение — не нашёл. пришлось разбираться самому

Включить ANSI

Консоль Windows умеет понимать ANSI-последовательности, но эту возможность нужно включить флагом ENABLE_VIRTUAL_TERMINAL_PROCESSING через WinAPI.

0x4 — то самое магическое число
var handle = GetStdHandle(-11);
GetConsoleMode(handle, out int mode);
SetConsoleMode(handle, mode | 0x4); // ENABLE_VIRTUAL_TERMINAL_PROCESSING

Яркость одним множителем

После этого цвет можно задавать 24-битной последовательностью \x1b[38;2;R;G;Bm. Если умножить каждый канал на один коэффициент, яркость всего текста меняется одним числом. Попробуй сам:

в игре это был пункт в настройках. сейчас понимаю, что это был мой первый «дизайн-токен»
1

красный · зелёный · синий ·белый — «Ночь, 5:22 по стандартному циклу.»

\x1b[38;2;204;204;204m
public static void ReloadTextColors()
{
    textColorFactor = Math.Round(textColorFactor, 1);
    textColorWhite = "\x1b[38;2;" + Convert.ToInt32(255 * textColorFactor) + ";" + ...;
}