Wie zeichnet man ein einzelnes Pixel in einem Terminal?

10

Bisher habe ich Zeichen verwendet, um Bilder, Formen usw. in einem Terminal zu zeichnen.

Ist es möglich, ein einzelnes Pixel zu zeichnen?

Sagen wir:

foo 1 1 red

Dadurch wird ein rotes Pixel an der Koordinate gezeichnet (1, 1).

Gibt es eine vorhandene Anwendung, die diese Aufgabe übernimmt?

Derzeit läuft Ubuntu 14.04.

Ionică Bizău
quelle
3
Was für ein Terminal haben Sie? Ein DEC GT40 ?
Anthon
@Anthon Gnome-Terminal (das mit Ubuntu
geliefert wird
1
@Anthon A DEC GT40wäre nützlich, aber es ist zu teuer ... :-)
Ionică Bizău
1
@terdon Ich habe für die Wiedereröffnung gestimmt, da dies eigentlich keine Programmierfrage ist (ich habe das Tag c und c ++ entfernt , denn wenn Sie C- oder C ++ - Code schreiben, ist dies hier kein Thema). "Es gibt keine solche Funktion, Sie müssten sie programmieren" wäre hier eine richtige Antwort - außer dass sie falsch wäre: Eine gute Antwort würde Tektronix erwähnen und über das Terminalfenster zeichnen, wie es w3m tut.
Gilles 'SO - hör auf böse zu sein'
1
@ Gilles fair genug, ich habe wieder geöffnet. Ich habe es geschlossen, weil es gerade auf SO migriert wurde und dort nicht willkommen war.
Terdon

Antworten:

10

Terminals sind Charakter-Zelle zeigt und keine Unterstützung für Pixelgrafiken zeichnen. Nicht einmal unter X11; Obwohl es durchaus möglich ist, einzelne Pixel zu zeichnen, wenn Sie direkt mit einem X-Server sprechen, kann Ihr Programm, wenn es mit einem Terminal spricht, das Terminal nur auffordern, Zeichen anzuzeigen.

Um Grafiken anstelle von Text anzuzeigen, müssen Sie ein Programm schreiben, das direkt mit dem X-Server interagiert. Dies erfolgt normalerweise über eine UI-Toolkit-Bibliothek wie GTK , Qt oder wxWidgets .

Wyzard
quelle
6
Es gibt alle Arten von Terminals, einige mit grafischen Funktionen (wie der Tektronix-Modus xtermoder das Einbetten von Bildern von terminology). Beachten Sie, dass sich das Terminal auch auf X11-Terminals bezieht (die Nachfolger von Dingen wie den Tektronix-Terminals)
Stéphane Chazelas,
2
Cool! Einige Enthusiasten zeichnen 3D-Teekanne in xterm =) dim13.org/2009/02/teapot
gena2x
Wenn das Terminal nur Zeichen "zeichnen" kann, sollte das Pixel möglicherweise zu einem Zeichen gemacht werden, damit es gezeichnet werden kann ...
10

Schauen Sie sich die Drawille-Bibliothek an . Es verwendet die UTF-Braillezeichen, um Pixel zu zeichnen.

Mipmip
quelle
1
Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
slm
1

Sie können keine einzelnen Pixelfarben im Terminal zeichnen , es sei denn, Sie können die von Wyzard erwähnten Aktionen ausführen , selbst programmieren oder ein bereits für den Auftrag erstelltes Tool finden (dies kann terminalspezifisch sein). Es ist jedoch möglich, einzelne Zeichenkoordinaten in Ihrem Terminal zu verwenden, um 2D-Bilder mit ASCII- und UTF-8-Zeichen zu zeichnen. Das Tool dafür heißt tput. Dieses Werkzeug manipuliert die Cursorposition entsprechend den Koordinaten Ihres aktuellen Terminals. Hier ist eine Beispielliste mit tputFunktionen:

# 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
quelle
1

Zusätzlich zu den wichtigsten Widget-Toolkits (GTK, Qt, WxWidgets), die in Wyzards Antwort erwähnt wurden , könnten Sie auch medienorientiertere Bibliotheken wie SFML oder libSDL in Betracht ziehen . Wenn Sie nur eine grafische Ausgabe (fast ohne Interaktion) wünschen, können Sie sogar CairoGraphics in Betracht ziehen .

In einigen Fällen können Sie über eine Pipe (z. B. Popen ) oder in der Befehlszeile Befehlsdienstprogramme wie GNUplot oder GraphViz verwenden .

Sie können auch die grafischen Fähigkeiten Ihres Browsers nutzen, z. B. indem Sie eine dedizierte Webanwendung codieren (mithilfe einer HTTP- Serverbibliothek wie Wt oder libonion mit Webtechnologien wie AJAX, SVG, HTML5, Canvas, Websockets usw.).

Die meisten Terminalemulatoren verfügen jedoch über keine oder zu geringe grafische Fähigkeiten (also keine echten Pixelgrafiken). Sie benötigen also praktisch Ihr Programm, um mit dem Anzeigeserver ( X11 , Wayland , ...) zu interagieren .

Basile Starynkevitch
quelle