Como desenhar um único pixel em um terminal?

10

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

É possível desenhar um único pixel?

Digamos que:

foo 1 1 red

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

Existe um aplicativo existente que fará esse trabalho?

Atualmente executando o Ubuntu 14.04.

    
por Ionică Bizău 25.07.2014 / 07:41

4 respostas

9

Os terminais são exibições da célula de caracteres e não oferecem suporte a gráficos de pixel de desenho. Nem mesmo quando rodando no X11; embora seja certamente possível desenhar pixels individuais ao falar diretamente com um servidor X, se o seu programa estiver falando com um terminal, ele só poderá solicitar 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 de kit de ferramentas de interface do usuário, como GTK , Qt ou wxWidgets .

    
por 25.07.2014 / 08:30
8

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

    
por 21.05.2015 / 23:30
1

Você não conseguirá desenhar cores de pixel único no terminal, a menos que você possa fazer as menções do Wyzard , programa você mesmo, ou encontre 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 . Esta ferramenta funciona manipulando a posição do cursor de acordo com as coordenadas do seu terminal atual. Aqui está uma lista de amostras de tput funcionalidades:

# 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
    
por 11.12.2017 / 10:22
0

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

Em alguns casos, você pode usar, por meio de um canal (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 de seu navegador, por exemplo, codificando algum aplicativo web dedicado (usando alguma biblioteca de servidor HTTP como Wt ou libonion , com tecnologias web como AJAX, SVG, HTML5, canvas, websockets, etc ...)

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

    
por 11.12.2017 / 10:32