Exibe imagens no console (curses)?

1

Qual abordagem pode ser usada para exibir uma imagem em um console (sem janelas X)?

Por exemplo, posso usar curses / ncurses para dividir um console em painéis diferentes, mas em algumas situações eu gostaria de exibir uma imagem em um dos painéis. Ter que mudar para o X e assumir toda essa bagagem e sobrecarga apenas para exibir uma imagem parece ser um exagero total. Eu NÃO preciso de um sistema de janelas ou de manipulação de mouse. Eu só preciso colocar uma imagem na tela.

O problema que tenho com o X Windows é que ele é um sistema de "janelas", enquanto eu prefiro uma abordagem baseada em quadros (sem sobreposições) como maldições. (Eu acho que todo o paradigma "janela" inventado pela Xerox Parc que concebe "janelas" como um análogo de peças de papel em uma mesa que fica em cima do outro é idiota.)

Em teoria, isso deve ser possível, porque, no meu entender, os consoles não são realmente mais consoles. Eles são emulados consoles e, na verdade, são implementados com uma resolução de tela inteira que tem um controle de pixel por pixel. A questão é como esse emulador pode ser estendido para suportar a exibição limitada de imagens raster no console?

Uma solução possível, embora específica do Linux, é a funcionalidade Linux Framebuffer (fbdev) . É possível fazer isso para jogar bem com ncurses?

    
por Tyler Durden 22.01.2016 / 18:51

4 respostas

2

Os "consoles emulados" são específicos do sistema, como você entende com sua referência a fbdev . Além disso, eles são geralmente integrados ao kernel, então tentar modificá-los diretamente exigiria a modificação do kernel, o que certamente é mais “exagero” do que ficar com o X.

Você poderia usar fbdev diretamente ou escrever algo baseado em SDL, como Thomas Dickey sugere, mas, como ele disse, nenhum dos trabalhos necessários foi feito, e a quantidade de trabalho que representa não deve ser subestimada.

Mas enquanto a maioria dos ambientes de desktop são bastante pesados, o próprio X não é (por nenhum padrão remotamente moderno). Se você tiver um aplicativo baseado principalmente em texto, mas precisar colocar uma imagem de vez em quando, considere usar X sem um ambiente de área de trabalho. Como? Use startx ou um script personalizado para iniciar o servidor X e um xterm (ou seu emulador de terminal de escolha), em tela cheia, sem gerenciador de janelas (ou encontre um dos WMs ultra-leves alternativos). Esconda o cursor do mouse se quiser. Então, de dentro do seu programa em modo texto, você pode iniciar e parar os clientes X leves que exibem imagens em locais especificados na tela e removê-los sob o controle do programa. Você pode redimensionar o xterm ou apenas acomodar o fato de que parte da sua tela de texto será obscurecida. Claro, há um número ilimitado de variações sobre este tema, mas você tem a idéia.

Eu costumava usar X em máquinas Unix com menos de 4Mb de RAM (não Gb), então não é necessário que o X seja inchado. Como um efeito secundário benéfico, você ganha portabilidade de plataforma (você pode potencialmente direcionar qualquer coisa com um servidor X) e a capacidade de executar remotamente.

    
por 06.05.2016 / 01:25
1

Em princípio, talvez. Mas nenhum dos trabalhos necessários foi feito. ncurses é baseado em POSIX termios e os framebuffers têm pouco a ver com isso.

PDCurses foi portado para usar o SDL ( Simple Direct Mídia ), então é "factível".

    
por 22.01.2016 / 19:22
0

Não é estritamente ncurses, mas terminologia é um emulador de terminal com suporte de imagem embutido. Se você construir o EFL com o backend fbdev, ele será executado sem X. Observe que fbdev é considerado obsoleto no kernel do linux, portanto, nenhum novo driver está sendo produzido para ele. Para executar a terminologia com o backend fbdev:

ELM_ENGINE=fb terminology

Dependendo da sua distro, o EFL pode ou não ser construído com suporte a fbdev. Verifique se ./configure foi executado com --enable-fb

    
por 24.04.2018 / 16:08
0

Você poderia experimentar a libaa. A Arte ASCII é muito boa, embora até uma tela grande possa exigir zoom para ver qualquer detalhe. O aplicativo de exibição é chamado aview, mas lê somente o formato da família p m m, por exemplo .pnm. Uma rápida execução através do utilitário de conversão do Imagemagick pode resolver isso. Veja o seguinte para detalhes, algumas distribuições da libaa e utilitários. Existe uma galeria para demonstrar as capacidades da libaa.

link

    
por 01.05.2018 / 05:24