Как я могу вывести разные оттенки зеленых на терминал?

StackOverflow https://stackoverflow.com/questions/2814478

  •  26-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Вы можете использовать 256COCLORS2.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

ПРИМЕЧАНИЕ: Чарльз Кажется, совсем больше о том, как он на самом деле работает и то, что вам нужно сделать, чтобы проверить, что оболочка поддерживает необходимые возможности. Моя информация строго основана на наблюдении и тестировании с помощью оболочки, известной для поддержки 256 цветов (Konsole).

Другие советы

Как вы это делаете, зависит от вашего терминала. Вы можете быть в состоянии запросить базу данных 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 Формат строки не слишком сложна.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top