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 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.
fonte
-noverbose
opçã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.-noverbose
funciona para mim usando ofbi
raspbian quando eu o instalei usandoapt-get install fbi
.pode ajudá-lo, manual detalhado http://hacklab.cz/2012/04/22/usefulness-linux-framebuffer-virtual-console Eu acho que tudo está em um só lugar sobre o Linux Framebuffer
fonte
A documentação do kernel 4.2 do Linux, https://github.com/torvalds/linux/blob/v4.2/Documentation/fb/api.txt#45, diz:
Segue uma lista de imagens e tipos, mas a descrição não é suficiente para eu entender imediatamente os formatos exatos.
fonte
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 .
fonte
Se você pode instalá-los,
fbcat
criará uma imagem em ppm efbgrab
uma imagem em png.fonte
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.
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.
fonte