Como desenhar um único pixel em um terminal?

10

Até agora eu usava caracteres para desenhar imagens, formas etc. em um terminal.

É possível desenhar um único pixel?

Digamos:

foo 1 1 red

Isso irá desenhar um pixel vermelho na coordenada (1, 1).

Existe um aplicativo existente que fará esse trabalho?

Atualmente executando o Ubuntu 14.04.

Ionică Bizău
fonte
3
Que tipo de terminal você tem? Um DEC GT40 ?
Anthon
@Anthon Gnome-Terminal (que vem com o Ubuntu)
Ionică Bizău
1
@Anthon Um DEC GT40seria útil, mas é muito caro ... :-)
Ionică Bizau
1
@terdon Votei em reabrir porque esta não é intrinsecamente uma questão de programação (eu removi a tag c e c ++ , porque se você estiver escrevendo código C ou C ++, isso é fora de tópico aqui). “Não existe esse recurso, você precisaria programá-lo” seria uma resposta adequada aqui - exceto que seria errado: uma boa resposta mencionaria o Tektronix e traçaria a janela do terminal, como o w3m.
Gilles 'SO- stop be evil'
1
@ Gilles justo o suficiente, eu reabri. Fechei porque estava em processo de migração para SO e não era bem-vindo lá.
terdon

Respostas:

10

Os terminais são exibições de células de caracteres e não suportam desenhar gráficos de pixels. Nem mesmo quando rodando no X11; embora seja certamente possível desenhar pixels individuais ao conversar diretamente com um servidor X, se o seu programa estiver conversando com um terminal, ele poderá solicitar apenas que o terminal exiba caracteres.

Para exibir gráficos em vez de texto, você precisará escrever um programa que interaja diretamente com o servidor X. Isso geralmente é feito por meio de uma biblioteca do kit de ferramentas da interface do usuário, como GTK , Qt ou wxWidgets .

Wyzard
fonte
7
Existem todos os tipos de terminais, alguns com recursos gráficos (como o modo Tektronix xtermou a incorporação de imagens terminology). Note-se que o terminal também se refere aos terminais X11 (os sucessores de coisas como os Tektronix)
Stéphane Chazelas
2
Legal! Alguns entusiastas desenhar bule 3d no xterm =) dim13.org/2009/02/teapot
gena2x
Se o terminal só pode "desenhar" caracteres, então talvez o pixel deve ser feito um char para que possa ser desenhado ...
10

Dê uma olhada na biblioteca Drawille . Ele usa os caracteres braille UTF para desenhar pixels.

mipmip
fonte
1
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
slm
1

Você não poderá desenhar cores de pixel único no terminal, a menos que possa fazer o que a Wyzard menciona, programar você mesmo ou encontrar uma ferramenta já feita para o trabalho (isso pode ser específico do terminal). No entanto, é possível usar coordenadas de caracteres individuais no seu terminal para desenhar imagens 2D usando caracteres ASCII e UTF-8. A ferramenta para isso é chamada tput. Essa ferramenta funciona manipulando a posição do cursor de acordo com as coordenadas do seu terminal atual. Aqui está uma lista de exemplo de tputfuncionalidades:

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

Além dos kits de ferramentas de widget principais (GTK, Qt, WxWidgets) mencionados na resposta de Wyzard, você também pode considerar bibliotecas mais orientadas à mídia, como SFML ou libSDL . Se você quer apenas uma saída gráfica (com quase nenhuma interação), pode até considerar o CairoGraphics .

Em alguns casos, você pode usar, através de um pipe (por exemplo, popen ) ou, na linha de comando, utilitários de comando como GNUplot ou GraphViz .

Você também pode considerar o uso das habilidades gráficas do seu navegador, por exemplo, codificando algum aplicativo da web dedicado (usando alguma biblioteca de servidores HTTP como Wt ou libonion , com tecnologias da web como AJAX, SVG, HTML5, canvas, websockets, etc ...)

Mas a maioria dos emuladores de terminal possui pouca ou nenhuma capacidade gráfica (portanto, nenhum gráfico de pixel genuíno). Portanto, você praticamente precisa do seu programa para interagir com o servidor de exibição ( X11 , Wayland , ...).

Basile Starynkevitch
fonte