Как я могу вывести различные оттенки зеленого на терминал? - PullRequest
3 голосов
/ 12 мая 2010

В настоящее время я использую следующий код для вывода текста на терминал зеленым цветом:

printf("%c[1;32mHello, world!\n", 27);

Однако я хочу больше оттенков зеленого.Какой самый простой способ сделать это?

Ответы [ 3 ]

3 голосов
/ 12 мая 2010

Вы можете использовать скрипт 256colors2.pl на сайте Роба Мермана , чтобы убедиться, что ваш терминал правильно обрабатывает 256 цветов. Затем выберите правильную комбинацию значений RGB, чтобы получить правильный оттенок зеленого.

Исходя из его сценария, похоже, что номера цветов по сути являются смещением базовой 6 цветовой схемы:

COLOR = r*6^2 + g*6 + b) + 16

А для цвета переднего плана нам нужно использовать:

\x1b[38;5;${COLORNUM}m

И снова, основываясь на его сценарии, вот цикл (perl), который отображает букву O в желаемом цвете:

# now the color values
for ($green = 0; $green < 6; $green++) {
    for ($red = 0; $red < 6; $red++) {
        for ($blue = 0; $blue < 6; $blue++) {
            $color = 16 + ($red * 36) + ($green * 6) + $blue;
            print "\\x1b[38;5;${color}m :\x1b[38;5;${color}m O\x1b[0m ";
            print "\n" if ($blue == 2 || $blue == 5);
        }
    }
    print "\n";
}

А вот пример его вывода:

Screenshot showing color value samples

NOTE : Charles , кажется, немного больше о том, как это на самом деле работает и что вам нужно сделать, чтобы убедиться, что оболочка поддерживает требуемые возможности. Моя информация основана исключительно на наблюдении и тестировании с помощью оболочки, которая поддерживает 256 цветов (konsole).

2 голосов
/ 12 мая 2010

Как вы это сделаете, зависит от вашего терминала. Возможно, вы сможете запросить базу данных termcap или terminfo, чтобы узнать, как это сделать.

Это проще всего продемонстрировать с помощью некоторых tput команд.

например. на моем текущем терминале:

tput initc 2 500 900 100
tput setaf 2

Определяет цвет 2 как оттенок зеленого (параметры представляют собой значения RGB между 0 и 1000) и переключает основной цвет на этот цвет.

Чтобы увидеть последовательность символов, необходимую в программе C для вашего терминала, вы можете отобразить возможности с помощью infocmp.

например. (для моего терминала)

$ infocmp -1 | grep initc
        initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
$ infocmp -1 | grep setaf
        setaf=\E[38;5;%p1%dm,

Форматирование параметра % немного (хорошо, очень) разбирается, но задокументировано на справочной странице infocmp. Перевод этого в printf строку формата не слишком сложен.

0 голосов
/ 12 мая 2010

Это может помочь вам:

http://en.wikipedia.org/wiki/ANSI_escape_code

Вы действительно можете получить только 2 разных оттенка каждого цвета. Попробуйте заменить 1 на 2, чтобы получить темно-зеленый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...