it-swarm-pt.tech

posso exibir um JPG ou PNG para o framebuffer (/ dev / fb *)?

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

p.s. Estou usando um Raspberry Pi correndo 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 bem minhas necessidades.

17
ndmweb

Você já tentou Fbida ?

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

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

P.S - Não tenho certeza se funcionará em Raspbian.

7
VenkatH

pode ajudá-lo, manual detalhado http://hacklab.cz/2012/04/22/usefulness-linux-framebuffer-virtual-console Eu acho que tem tudo em um só lugar sobre o Linux Framebuffer

3
MichaelHefner

Em que formato estão os dados da imagem framebuffer?

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 do hardware. Os aplicativos precisam estar cientes do formato de armazenamento de pixels para gravar dados de imagem na memória do buffer do quadro no formato esperado pelo hardware.

Os formatos são descritos por tipos de buffer de quadro e visuais. Alguns visuais exigem informações adicionais, que são armazenadas nos campos bits_per_pixel, grayscale, red, green, blue e transp da informação de tela variável.

Os visuais descrevem como as informações de cores são codificadas e montadas para criar macropixels. Tipos descrevem como os macropixels são armazenados 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.

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

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

1
zqb-all

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ê puder fazer com que ele corresponda exatamente ao modo que você precisa. 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/cor etc. precisam combinar 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, em seguida, 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 eu apenas instalei 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 defini-lo como papel de parede em Preferências do Desktop e ele vai aparecer em cada inicialização.

0
Alan Corey

Se você puder instalá-los, fbcat criará uma imagem ppm e fbgrab criará uma imagem png.

0
Yves Dorfsman