Come disegnare un singolo pixel in un terminale?


10

Fino ad ora ho usato personaggi per disegnare immagini, forme ecc. In un terminale.

È possibile disegnare un singolo pixel?

Diciamo:

foo 1 1 red

Questo disegnerà un pixel rosso sulla coordinata (1, 1).

Esiste un'applicazione esistente che farà questo lavoro?

Ubuntu attualmente in esecuzione 14.04.


3
Che tipo di terminale hai? Una DEC GT40 ?
Anthon,

@Anthon Gnome-Terminal (fornito con Ubuntu)
Ionică Bizău,

1
@Anthon A DEC GT40sarebbe utile, ma è troppo costoso ... :-)
Ionică Bizău

1
@terdon Ho votato per riaprire perché questa non è intrinsecamente una domanda di programmazione (ho rimosso i tag c e c ++ , perché se hai intenzione di scrivere codice C o C ++, qui è fuori tema). "Non esiste una funzione del genere, avresti bisogno di programmarla" sarebbe una risposta corretta qui - tranne per il fatto che sarebbe sbagliata: una buona risposta menzionerebbe Tektronix e disegnerebbe sulla finestra del terminale come fa w3m.
Gilles 'SO- smetti di essere malvagio' il

1
@Gilles abbastanza giusto, ho riaperto. L'ho chiuso perché era in fase di migrazione a SO e non era il benvenuto.
terdon

Risposte:


10

I terminali sono display a celle di caratteri e non supportano il disegno di grafica pixel. Nemmeno quando si esegue in X11; sebbene sia certamente possibile disegnare singoli pixel quando si parla direttamente con un server X, se il programma sta parlando con un terminale può solo chiedere al terminale di visualizzare i caratteri.

Per visualizzare la grafica anziché il testo, dovrai scrivere un programma che interagisce direttamente con il server X. Questo in genere viene eseguito tramite una libreria di toolkit dell'interfaccia utente come GTK , Qt o wxWidgets .


7
Ci sono tutti i tipi di terminali, alcuni con capacità grafiche (come la modalità Tektronix di xterm, o l'incorporamento di immagini di terminology). Si noti che il terminale si riferisce anche ai terminali X11 (i successori di cose come quelle di Tektronix)
Stéphane Chazelas,

2
Freddo! Alcuni appassionati disegnano teiera 3d in xterm =) dim13.org/2009/02/teapot
gena2x

Se il terminale può solo "disegnare" caratteri, allora forse il pixel dovrebbe diventare un carattere in modo che possa essere disegnato ...


1

Non sarai in grado di disegnare colori a pixel singolo nel terminale a meno che tu non possa fare ciò che Wyzard menziona, programmarlo da solo o trovare uno strumento già fatto per il lavoro (questo potrebbe essere specifico del terminale). Tuttavia, è possibile utilizzare le coordinate dei singoli caratteri nel terminale per disegnare immagini 2D utilizzando caratteri ASCII e UTF-8. Lo strumento per questo è chiamato tput. Questo strumento funziona manipolando la posizione del cursore in base alle coordinate del terminale corrente. Ecco un elenco di esempio di tputfunzionalità:

# 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

1

Oltre ai principali toolkit di widget (GTK, Qt, WxWidgets) menzionati nella risposta di Wyzard, potresti anche prendere in considerazione più librerie orientate ai media come SFML o libSDL . Se vuoi solo un risultato grafico (quasi senza interazione) potresti anche considerare CairoGraphics .

In alcuni casi è possibile utilizzare, tramite una pipe (ad esempio popen ) o sulla riga di comando, utilità di comando come GNUplot o GraphViz .

Potresti anche prendere in considerazione l'utilizzo delle capacità grafiche del tuo browser, ad esempio codificando alcune applicazioni Web dedicate (utilizzando alcune librerie di server HTTP come Wt o libonion , con tecnologie Web come AJAX, SVG, HTML5, canvas, websocket, ecc ...)

Ma la maggior parte degli emulatori terminali ha capacità grafiche insufficienti o insufficienti (quindi nessuna grafica pixel autentica). Quindi praticamente hai bisogno del tuo programma per interagire con il display server ( X11 , Wayland , ...).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.