Jak narysować pojedynczy piksel w terminalu?

10

Do tej pory używałem znaków do rysowania obrazów, kształtów itp. W terminalu.

Czy można narysować pojedynczy piksel?

Powiedzmy:

foo 1 1 red

Spowoduje to narysowanie czerwonego piksela na współrzędnej (1, 1).

Czy istnieje już aplikacja, która wykona tę pracę?

Aktualnie działający Ubuntu 14.04.

Ionică Bizău
źródło
3
Jaki masz terminal? Grudnia GT40 ?
Anthon
@Anthon Gnome-Terminal (dostarczany z Ubuntu)
Ionică Bizău
1
@Anthon A DEC GT40byłby użyteczny, ale jest zbyt drogi ... :-)
Ionică Bizău
1
@terdon Głosowałem za ponownym otwarciem, ponieważ nie jest to samo w sobie pytanie programistyczne (usunąłem znacznik c i c ++ , ponieważ jeśli zamierzasz napisać kod C lub C ++, jest to nie na temat). „Nie ma takiej funkcji, trzeba ją zaprogramować” byłaby tutaj poprawną odpowiedzią - z wyjątkiem tego, że byłaby błędna: dobra odpowiedź wspomniałaby o Tektronixie i rysowaniu w oknie terminala, tak jak robi to w3m.
Gilles „SO- przestań być zły”,
1
@Gilles dość, ponownie otworzyłem. Zamknąłem go, ponieważ był w trakcie migracji do SO i nie był tam mile widziany.
terdon

Odpowiedzi:

10

Terminale są wyświetlaczami komórek znakowych i nie obsługują rysowania grafiki pikselowej. Nawet gdy działa w X11; chociaż z pewnością możliwe jest rysowanie pojedynczych pikseli podczas rozmowy bezpośrednio z serwerem X, jeśli twój program rozmawia z terminalem, może jedynie poprosić terminal o wyświetlanie znaków.

Aby wyświetlić grafikę zamiast tekstu, musisz napisać program, który współdziała bezpośrednio z serwerem X. Zazwyczaj odbywa się to za pomocą biblioteki narzędzi interfejsu użytkownika, takich jak GTK , Qt lub wxWidgets .

Wyzard
źródło
7
Istnieje wiele rodzajów terminali, niektóre z możliwościami graficznymi (np. Tryb Tektronix xtermlub osadzanie obrazów terminology). Zauważ, że terminal odnosi się również do terminali X11 (następców takich jak Tektronix)
Stéphane Chazelas
2
Fajne! Niektórzy entuzjaści rysują czajniczek 3d w xterm =) dim13.org/2009/02/teapot
gena2x
Jeśli terminal może tylko „rysować” znaki, to może piksel powinien być char, aby można go było narysować ...
10

Zajrzyj do biblioteki Drawille . Do rysowania pikseli używa znaków brajlowskich UTF.

mipmip
źródło
1
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
slm
1

Nie będziesz w stanie narysować kolorów jednego piksela w terminalu, chyba że będziesz w stanie zrobić to , o czym wspomniał Wyzard , sam go zaprogramować lub znaleźć narzędzie dla tego zadania (może to być specyficzne dla terminala). Możliwe jest jednak użycie współrzędnych poszczególnych znaków w terminalu do rysowania obrazów 2D przy użyciu znaków ASCII i UTF-8. Narzędzie do tego nazywa się tput. To narzędzie działa poprzez manipulowanie pozycją kursora zgodnie ze współrzędnymi bieżącego terminala. Oto przykładowa lista tputfunkcjonalności:

# 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
Jokai
źródło
1

Oprócz głównych zestawów narzędzi widgetów (GTK, Qt, wxWidgets) wymienionych w odpowiedzi Wyzard za można również rozważyć bardziej zorientowane bibliotek multimedialnych, takich jak SFML lub libSDL . Jeśli chcesz tylko trochę graficznych wyników (prawie bez interakcji), możesz nawet rozważyć CairoGraphics .

W niektórych przypadkach możesz użyć, poprzez potok (np. Popen ) lub w wierszu poleceń, narzędzi poleceń, takich jak GNUplot lub GraphViz .

Możesz również rozważyć wykorzystanie możliwości graficznych przeglądarki, np. Kodując jakąś dedykowaną aplikację internetową (używając biblioteki serwera HTTP, takiej jak Wt lub libonion , z technologiami internetowymi, takimi jak AJAX, SVG, HTML5, canvas, websockets itp.)

Ale większość emulatorów terminali nie ma zdolności graficznych lub ma za mało zdolności (więc nie ma oryginalnej grafiki pikselowej). Praktycznie więc potrzebujesz swojego programu do interakcji z serwerem wyświetlania ( X11 , Wayland , ...).

Basile Starynkevitch
źródło