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.


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 .


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.


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

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 , ...).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.