Comment dessiner un seul pixel dans un terminal?

10

Jusqu'à présent, j'utilisais des caractères pour dessiner des images, des formes, etc. dans un terminal.

Est-il possible de dessiner un seul pixel?

Disons:

foo 1 1 red

Cela dessinera un pixel rouge à la coordonnée (1, 1).

Existe-t-il une application existante qui fera ce travail?

Actuellement sous Ubuntu 14.04.

Ionică Bizău
la source
3
Quel type de terminal avez-vous? UNE DEC GT40 ?
Anthon
@Anthon Gnome-Terminal (fourni avec Ubuntu)
Ionică Bizău
1
@Anthon A DEC GT40serait utile, mais c'est trop cher ... :-)
Ionică Bizău
1
@terdon J'ai voté pour la réouverture car ce n'est pas intrinsèquement une question de programmation (j'ai supprimé les balises c et c ++ , car si vous allez écrire du code C ou C ++, c'est hors sujet ici). «Il n'y a pas une telle fonctionnalité, vous auriez besoin de la programmer» serait une bonne réponse ici - sauf que ce serait faux: une bonne réponse mentionnerait Tektronix et dessinerait sur la fenêtre du terminal comme le fait w3m.
Gilles 'SO- arrête d'être méchant'
1
@Gilles assez bien, j'ai rouvert. Je l'ai fermé car il était en cours de migration vers SO et ce n'était pas le bienvenu là-bas.
terdon

Réponses:

10

Les terminaux sont des affichages à cellules de caractères et ne prennent pas en charge le dessin de graphiques en pixels. Pas même lors de l'exécution dans X11; bien qu'il soit certainement possible de dessiner des pixels individuels lorsque vous parlez directement à un serveur X, si votre programme parle à un terminal, il ne peut que demander au terminal d'afficher des caractères.

Pour afficher des graphiques au lieu de texte, vous devrez écrire un programme qui interagit directement avec le serveur X. Cela se fait généralement via une bibliothèque de boîte à outils d'interface utilisateur telle que GTK , Qt ou wxWidgets .

Wyzard
la source
7
Il existe toutes sortes de terminaux, certains avec des capacités graphiques (comme le mode Tektronix de xterm, ou l'incorporation d'images de terminology). Notez que le terminal fait également référence aux terminaux X11 (les successeurs des choses comme celles de Tektronix)
Stéphane Chazelas
2
Cool! Certains passionnés dessinent une théière 3D dans xterm =) dim13.org/2009/02/teapot
gena2x
Si le terminal ne peut que "dessiner" des caractères, alors peut-être que le pixel devrait être transformé en caractère afin qu'il puisse être dessiné ...
10

Jetez un œil à la bibliothèque Drawille . Il utilise les caractères braille UTF pour dessiner des pixels.

mipmip
la source
1
Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
slm
1

Vous ne pourrez pas dessiner des couleurs de pixel unique dans le terminal à moins que vous ne puissiez faire ce que Wyzard mentionne, le programmer vous-même ou trouver un outil déjà fait pour le travail (cela pourrait être spécifique au terminal). Cependant, il est possible d'utiliser des coordonnées de caractères individuelles dans votre terminal pour dessiner des images 2D en utilisant des caractères ASCII et UTF-8. L'outil pour cela est appelé tput. Cet outil fonctionne en manipulant la position du curseur en fonction des coordonnées de votre terminal actuel. Voici un exemple de liste de tputfonctionnalités:

# 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
la source
1

En plus des principaux outils de widgets (GTK, Qt, WxWidgets) mentionnés dans la réponse de Wyzard, vous pouvez également envisager des bibliothèques davantage orientées médias comme SFML ou libSDL . Si vous voulez juste une sortie graphique (avec presque aucune interaction), vous pourriez même envisager CairoGraphics .

Dans certains cas, vous pouvez utiliser, via un canal (par exemple popen ) ou sur la ligne de commande, des utilitaires de commande comme GNUplot ou GraphViz .

Vous pouvez également envisager d'utiliser les capacités graphiques de votre navigateur, par exemple en codant une application Web dédiée (en utilisant une bibliothèque de serveur HTTP comme Wt ou libonion , avec des technologies Web comme AJAX, SVG, HTML5, canvas, websockets, etc ...)

Mais la plupart des émulateurs de terminaux n'ont pas ou trop peu de capacités graphiques (donc pas de véritables graphismes en pixels). Vous avez donc pratiquement besoin de votre programme pour interagir avec le serveur d'affichage ( X11 , Wayland , ...).

Basile Starynkevitch
la source