posso exibir um JPG ou PNG no buffer de quadros (/ dev / fb *)?

19

Eu sei que posso capturar o framebuffer no linux usando algo como cp /dev/fb0 ~/myimagee reexibir isso copiando de volta para o dispositivo dessa maneira cp ~/myimage /dev/fb0. Em que formato estão os dados da imagem do buffer de quadros? e como exibir uma imagem pré-criada (jpg, png) no buffer de quadros? Posso converter para esse formato usando o imagemagick?

ps Estou usando um raspberry pi executando raspbian.



Atualização 11-12-2012

Acabei usando pygame para exibir imagens no meu aplicativo. Não tenho certeza se isso usa o buffer de quadros para exibir as imagens. Mas atende muito bem às minhas necessidades.

ndmweb
fonte

Respostas:

8

Você já experimentou a Fbida ?

fbidacontém fbi, um visualizador de imagens para o framebuffer.

Link para a fbipágina do manual - http://manpages.ubuntu.com/manpages/lucid/man1/fbi.1.html

PS - Não tenho certeza se funcionará no Raspbian.

VenkatH
fonte
Infelizmente, parece não ser possível impedir que o 'fbi' exiba uma barra de status na parte inferior da tela. Este é um pouco de um limitador de exibição para várias aplicações ... #
237 Jules
3
@Jules No Debian 8 (testing), existe uma -noverboseopção que o faz exibir apenas a própria imagem; no entanto, isso não está documentado na página de manual, mas apenas no "uso:" para ele.
Abbafei
Funciona? Anteriormente, eu criei uma cópia da fonte na página do autor e ela tinha a opção, mas a opção não parecia realmente fazer nada nessa versão.
Jules
O @Jules -noverbosefunciona para mim usando o fbiraspbian quando eu o instalei usando apt-get install fbi.
D. Woods
2

Em que formato estão os dados da imagem do buffer de quadros?

A documentação do kernel 4.2 do Linux, https://github.com/torvalds/linux/blob/v4.2/Documentation/fb/api.txt#45, diz:

Os pixels são armazenados na memória em formatos dependentes de hardware. Os aplicativos precisam estar cientes do formato de armazenamento de pixels para gravar dados de imagem na memória do buffer de quadros no formato esperado pelo hardware.

Os formatos são descritos por tipos de buffer de quadro e recursos visuais. Alguns recursos visuais requerem informações adicionais, que são armazenadas nos campos de informações variáveis ​​da tela bits_per_pixel, tons de cinza, vermelho, verde, azul e transp.

O visual descreve como as informações de cores são codificadas e montadas para criar macropixels. Os tipos descrevem como as macropixels são armazenadas na memória. Os seguintes tipos e recursos visuais são suportados.

Segue uma lista de imagens e tipos, mas a descrição não é suficiente para eu entender imediatamente os formatos exatos.

Ciro Santilli adicionou uma nova foto
fonte
11
@Downvoters, por favor, explique para que eu possa aprender e melhorar as informações. Eu nunca retaliar. Obrigado.
Ciro Santilli escreveu:
1

Se desejar cp /dev/fb0 ~/myimage, a imagem deve conter apenas as informações em pixels e a ordem deve estar correta ( RGB, BGR, RGBA, ARGB...)

Também quero fazer isso, mas não encontrei uma ferramenta adequada, então uso o python para me ajudar a pré-fabricar a imagem. Você pode tentar isso .

zqb-all
fonte
0

Se você pode instalá-los, fbcatcriará uma imagem em ppm e fbgrabuma imagem em png.

Yves Dorfsman
fonte
0

Veja /usr/include/linux/fb.h em estruturas como fb_var_screeninfo. Pode haver uma variedade de profundidades e formatos de cores. Eu vejo 16 bits / pixel com muita frequência, agora tenho 32. Digite fbset por si só e ele exibirá as configurações atuais. Que quase certamente será uma das entradas em /etc/fb.modes.

upstairs# fbset

mode "1920x1080"
    geometry 1920 1080 1920 1080 32
    timings 0 0 0 0 0 0 0
    rgba 8/16,8/8,8/0,8/24
endmode

O Imagemagick pode funcionar se você conseguir fazer exatamente o modo necessário. Eu provavelmente escreveria algo em C, uma dúzia de linhas chamando libjpeg ou libpng podem descomprimir uma imagem em uma matriz de memória. Seus bits / cores etc. precisam corresponder ou você precisa escrever algo para convertê-lo. Boa experiencia.

Além disso, em vez de ler / escrever / dev / fb0 como um arquivo, abra () para obter um descritor de arquivo e depois mmap () para que você esteja trabalhando com um ponteiro para a memória. É muito mais rápido em fazer transferências, pelo menos 10x.

Mas para colocar imagens na tela, basta instalar o qiv. Em seguida, pressione F1 para obter ajuda, mas um x ao exibir uma imagem a gravará semi-permanentemente na janela raiz, se é isso que você deseja. Ou apenas defina-o como papel de parede nas Preferências da área de trabalho e ele será exibido a cada inicialização.

Alan Corey
fonte
ARGB da mina aparentemente (Raspbian). Comecei com cores do tipo HTML em um seletor de cores do GIMP, fiz 4 tentativas para acertar.
Alan Corey