Terminalde tek bir piksel nasıl çizilir?


10

Şimdiye kadar terminalde resim, şekil vb. Çizmek için karakterler kullandım.

Tek bir piksel çizmek mümkün mü?

Diyelimki:

foo 1 1 red

Bu, koordinatta kırmızı bir piksel çizer (1, 1).

Bu işi yapacak mevcut bir uygulama var mı?

Şu anda Ubuntu 14.04 çalışıyor.


3
Ne tür bir terminaliniz var? Bir Aralık GT40 ?
Anthon

@Anthon Gnome Terminali (Ubuntu ile birlikte geliyor)
Ionică Bizău

1
@Anthon A DEC GT40yararlı olurdu, ama çok pahalı ... :-)
Ionică Bizău

1
@terdon Bu özünde bir programlama sorusu olmadığı için yeniden açmaya oy verdim ( C ve c ++ etiketini kaldırdım , çünkü C veya C ++ kodu yazacaksanız, bu konu dışı). “Böyle bir özellik yoktur, programlamanız gerekir” burada uygun bir cevap olacaktır - bunun yanlış olması dışında: iyi bir cevap Tektronix'ten bahsediyor ve w3m gibi terminal penceresini çiziyordu.
Gilles 'SO- kötü olmayı bırak'

1
@Gilles yeterince adil, yeniden açtım. SO'ya göç edilme sürecinde olduğu ve orada hoş karşılanmadığı için kapattım.
terdon

Yanıtlar:


10

Terminaller karakter hücresi ekranlarıdır ve çizim pikseli grafiklerini desteklemez. X11'de çalışırken bile değil; doğrudan bir X sunucusuyla konuşurken tek tek pikseller çizmek mümkün olsa da, programınız bir terminalle konuşuyorsa, terminalden sadece karakter göstermesini isteyebilir.

Metin yerine grafikleri görüntülemek için, doğrudan X sunucusuyla etkileşime giren bir program yazmanız gerekir. Bu genellikle GTK , Qt veya wxWidgets gibi bir UI araç kiti kitaplığı aracılığıyla yapılır .


7
Bazıları grafiksel yeteneklere sahip her türlü terminal vardır (Tektronix modu xtermveya görüntülerin gömülmesi gibi terminology). Terminalin ayrıca X11 terminalleri (Tektronix gibi şeylerin ardılları) anlamına geldiğini unutmayın
Stéphane Chazelas

2
Güzel! Bazı meraklılar xterm'de 3d çaydanlık çiziyor
gena2x

Terminal sadece "char" çizebilir, o zaman belki piksel bir char yapılmalıdır böylece çizilebilir ...

10

Drawille kütüphanesine bir göz atın . Piksel çizmek için UTF braille karakterlerini kullanır.


1
Bu teorik olarak soruyu cevaplayabilse de , cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak tercih edilir.
slm

1

Wyzard'ın bahsettiklerini yapamazsanız , kendiniz programlayamazsanız veya iş için zaten yapılmış bir araç bulamazsanız terminalde tek piksel renkleri çizemezsiniz (bu terminale özgü olabilir). Ancak, ASCII ve UTF-8 karakterlerini kullanarak 2D görüntüler çizmek için terminalinizde ayrı ayrı karakter koordinatları kullanmak mümkündür. Bunun için araç denir tput. Bu araç, imlecin konumunu geçerli terminalinizin koordinatlarına göre değiştirerek çalışır. İşte tputişlevselliklerin örnek bir listesi :

# 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

Wyzard'ın cevabında belirtilen büyük widget araç setlerine (GTK, Qt, WxWidgets) ek olarak, SFML veya libSDL gibi daha medya odaklı kütüphaneleri de düşünebilirsiniz . Sadece grafiksel bir çıktı istiyorsanız (neredeyse hiç etkileşim olmadan) CairoGraphics'i bile düşünebilirsiniz .

Bazı durumlarda, bir kanal aracılığıyla (örn. Popen ) veya komut satırında GNUplot veya GraphViz gibi komut yardımcı programlarını kullanabilirsiniz .

Ayrıca tarayıcınızın grafik yeteneklerini kullanmayı düşünebilirsiniz, örneğin bazı özel web uygulamalarını kodlayarak ( Wt veya libonion gibi bazı HTTP sunucu kitaplıklarını kullanarak , AJAX, SVG, HTML5, tuval, websockets, vb.)

Ancak çoğu terminal öykünücüsünün grafiksel yeteneği yoktur veya çok azdır (bu nedenle orijinal piksel grafikleri yoktur). Bu nedenle, görüntüleme sunucusuyla ( X11 , Wayland , ...) etkileşim kurmak için programınızın pratikte olması gerekir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.