Cara menggambar satu piksel di terminal?

10

Sampai sekarang saya menggunakan karakter untuk menggambar gambar, bentuk dll di terminal.

Apakah mungkin menggambar satu piksel?

Katakanlah:

foo 1 1 red

Ini akan menggambar pixel merah di koordinat (1, 1).

Apakah ada aplikasi yang sudah ada yang akan melakukan pekerjaan ini?

Saat ini menjalankan Ubuntu 14.04.

Ionică Bizău
sumber
3
Terminal apa yang Anda miliki? A DEC GT40 ?
Anthon
@Anthon Gnome-Terminal (yang datang dengan Ubuntu)
Ionică Bizău
1
@Anthon A DEC GT40akan berguna, tetapi terlalu mahal ... :-)
Ionică Bizău
1
@terdon Saya memilih untuk membuka kembali karena ini pada dasarnya bukan pertanyaan pemrograman (saya memang menghapus tag c dan c ++ , karena jika Anda akan menulis kode C atau C ++, itu di luar topik di sini). "Tidak ada fitur seperti itu, Anda harus memprogramnya" akan menjadi jawaban yang tepat di sini - kecuali bahwa itu akan salah: jawaban yang baik akan menyebutkan Tektronix dan menggambar di jendela terminal seperti w3m.
Gilles 'SANGAT berhenti menjadi jahat'
1
@ Gilles cukup adil, saya telah dibuka kembali. Saya menutupnya karena sedang dalam proses dimigrasi ke SO dan tidak diterima di sana.
terdon

Jawaban:

10

Terminal adalah tampilan sel karakter dan tidak mendukung menggambar grafik piksel. Bahkan ketika berjalan di X11; walaupun tentu saja mungkin untuk menggambar piksel individu ketika berbicara langsung ke server X, jika program Anda berbicara dengan terminal, ia hanya dapat meminta terminal untuk menampilkan karakter.

Untuk menampilkan grafik alih-alih teks, Anda harus menulis program yang berinteraksi langsung dengan server X. Ini biasanya dilakukan melalui pustaka toolkit UI seperti GTK , Qt , atau wxWidgets .

Wyzard
sumber
7
Ada semua jenis terminal, beberapa dengan kemampuan grafis (seperti mode Tektronix of xterm, atau penyematan gambar terminology). Perhatikan bahwa terminal juga merujuk ke terminal X11 (penerus hal-hal seperti yang Tektronix)
Stéphane Chazelas
2
Keren! Beberapa penggemar menggambar teko 3d di xterm =) dim13.org/2009/02/teapot
gena2x
Jika terminal hanya dapat "menggambar" karakter, maka mungkin piksel tersebut harus dibuat char sehingga dapat ditarik ...
10

Silahkan lihat di perpustakaan Drawille . Ia menggunakan karakter braille UTF untuk menggambar piksel.

mipmip
sumber
1
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
slm
1

Anda tidak akan dapat menggambar warna piksel tunggal di terminal kecuali Anda dapat melakukan apa yang Wyzard sebutkan, memprogramnya sendiri, atau menemukan alat yang sudah dibuat untuk pekerjaan itu (ini bisa khusus terminal). Namun dimungkinkan untuk menggunakan koordinat karakter individual di terminal Anda untuk menggambar gambar 2D menggunakan karakter ASCII dan UTF-8. Alat untuk ini disebut tput. Alat ini berfungsi dengan memanipulasi posisi kursor sesuai dengan koordinat terminal Anda saat ini. Berikut adalah daftar contoh tputfungsi:

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

Selain dari toolkit widget utama (GTK, Qt, wxWidgets) disebutkan dalam jawaban Wyzard ini Anda juga dapat mempertimbangkan media lebih berorientasi perpustakaan seperti SFML atau libSDL . Jika Anda hanya ingin keluaran grafis (hampir tanpa interaksi), Anda bahkan dapat mempertimbangkan CairoGraphics .

Dalam beberapa kasus Anda mungkin menggunakan, melalui pipa (misalnya popen ) atau pada baris perintah, utilitas perintah seperti GNUplot atau GraphViz .

Anda juga dapat mempertimbangkan untuk menggunakan kemampuan grafis dari browser Anda, misalnya dengan mengode beberapa aplikasi web khusus (menggunakan beberapa perpustakaan server HTTP seperti Wt atau libonion , dengan teknologi web seperti AJAX, SVG, HTML5, kanvas, sakelar web, dll ...)

Tetapi kebanyakan emulator terminal tidak memiliki atau terlalu sedikit kemampuan grafis (sehingga tidak ada grafik piksel asli). Jadi, Anda praktis membutuhkan program Anda untuk berinteraksi dengan server tampilan ( X11 , Wayland , ...).

Basile Starynkevitch
sumber