Как нарисовать один пиксель в терминале?

10

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

Можно ли нарисовать один пиксель?

Скажем так:

foo 1 1 red

Это нарисует красный пиксель в координате (1, 1).

Существует ли существующее приложение, которое будет выполнять эту работу?

На данный момент работает Ubuntu 14.04.

Ионика Бизэу
источник
3
Какой у вас терминал? Декабря GT40 ?
Энтон
@Anthon Gnome-Terminal (поставляется с Ubuntu)
Ионика Бизэу
1
@Anthon A DEC GT40было бы полезно, но это слишком дорого ... :-)
Ionică Bizau
1
@terdon Я проголосовал за повторное открытие, потому что это по сути не вопрос программирования (я убрал теги c и c ++ , потому что, если вы собираетесь писать код на C или C ++, это здесь не по теме). «Такой функции нет, вам нужно ее запрограммировать», - здесь будет правильный ответ - за исключением того, что она будет неправильной: хороший ответ будет включать Tektronix и рисование поверх окна терминала, как это делает w3m.
Жиль "ТАК - перестань быть злым"
1
@ Достаточно справедливо, я снова открыл. Я закрыл его, потому что он был в процессе перехода на SO, и это не приветствовалось там.
Тердон

Ответы:

10

Терминалы являются дисплеями символьных ячеек и не поддерживают рисование пиксельной графики. Даже при работе в X11; хотя, конечно, можно рисовать отдельные пиксели при непосредственном общении с X-сервером, если ваша программа общается с терминалом, она может только попросить терминал отображать символы.

Чтобы отображать графику вместо текста, вам нужно написать программу, которая напрямую взаимодействует с X-сервером. Обычно это делается с помощью библиотеки инструментария пользовательского интерфейса, такой как GTK , Qt или wxWidgets .

Wyzard
источник
7
Существуют всевозможные терминалы, некоторые с графическими возможностями (например, режим Tektronix xtermили встраивание изображений terminology). Обратите внимание, что терминал также относится к терминалам X11 (наследники таких вещей, как Tektronix)
Стефан Шазелас
2
Прохладно! Некоторые энтузиасты рисуют 3d чайник в xterm =) dim13.org/2009/02/teapot
gena2x
Если терминал может только «рисовать» символы, то, возможно, пиксель должен быть сделан
10

Взгляните на библиотеку Drawille . Он использует символы Брайля UTF для рисования пикселей.

mipmip
источник
1
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
SLM
1

Вы не сможете рисовать однопиксельные цвета в терминале, если не сможете сделать то, о чем упоминает Вайзард , запрограммировать его самостоятельно или найти инструмент, уже созданный для этой работы (это может зависеть от терминала). Однако в вашем терминале можно использовать координаты отдельных символов для рисования 2D-изображений с использованием символов ASCII и UTF-8. Инструмент для этого называется tput. Этот инструмент работает, управляя положением курсора в соответствии с координатами вашего текущего терминала. Вот примерный список tputфункций:

# tput Cursor Movement Capabilities:

tput cup Y X
    # Move cursor to screen location X,Y (top left is 0,0)

tput sc
    # Save the cursor position

tput rc
    # Restore the cursor position

tput lines
    # Output the number of lines of the terminal

tput cols
    # Output the number of columns of the terminal

tput cub N
    # Move N characters left

tput cuf N
    # Move N characters right

tput cuu N
    # up N lines

tput cud N
    # down N lines
Yokai
источник
1

Кроме основных виджетов инструментариев (GTK, Qt, WxWidgets) , упомянутых в ответе Wyzard в вы также могли бы рассмотреть больше средств массовой информации , ориентированные библиотеки , как SFML или libSDL . Если вам нужен только графический вывод (практически без взаимодействия), вы можете даже рассмотреть CairoGraphics .

В некоторых случаях вы можете использовать, через канал (например, popen ) или в командной строке, такие командные утилиты, как GNUplot или GraphViz .

Вы могли бы также рассмотреть возможность использования графических возможностей вашего браузера, например , путем кодирования некоторые выделенный веб - приложение ( с помощью библиотеки HTTP - сервера , как Wt или libonion , с веб - технологий , таких как AJAX, SVG, HTML5, холст, WebSockets, и т.д ...)

Но большинство терминальных эмуляторов не имеют или слишком мало графических возможностей (поэтому нет подлинной пиксельной графики). Таким образом, вам практически нужна ваша программа для взаимодействия с сервером дисплея ( X11 , Wayland , ...).

Василий Старынкевич
источник