¿Puedo mostrar un JPG o PNG al framebuffer (/ dev / fb *)?

19

Sé que puedo capturar el framebuffer en linux usando algo así cp /dev/fb0 ~/myimagey volver a mostrarlo volviendo al dispositivo así cp ~/myimage /dev/fb0. ¿En qué formato están los datos de la imagen framebuffer? y ¿cómo haría para mostrar una imagen prefabricada (jpg, png) al framebuffer? ¿Puedo convertir a este formato usando imagemagick?

ps Estoy usando un raspberry pi corriendo raspbian.



Actualización 12-12-2012

Terminé usando pygame para mostrar imágenes en mi aplicación. No estoy seguro si esto usa el frame-buffer para mostrar las imágenes. Pero satisface mis necesidades bastante bien.

ndmweb
fuente

Respuestas:

8

¿Has probado Fbida? ?

fbida contiene fbi , un visor de imágenes para el framebuffer.

Enlace a la fbipágina man - http://manpages.ubuntu.com/manpages/lucid/man1/fbi.1.html

PD: no estoy seguro de si funcionará en Raspbian.

VenkatH
fuente
Desafortunadamente, no parece posible evitar que 'fbi' muestre una barra de estado en la parte inferior de la pantalla. Esto es un poco espectacular para diversas aplicaciones ...
Julio
3
@Jules En Debian 8 (prueba), hay una -noverboseopción que hace que muestre solo la imagen en sí; sin embargo, esto no está documentado en la página del manual, sino que solo está en el "uso:" para el mismo.
Abbafei
¿Funciona? Anteriormente construí una copia de la fuente en la página web del autor, y esa tenía la opción, pero la opción no parecía hacer nada en absoluto en esa versión.
Julio
@Jules -noverbosefunciona para mí usando fbiraspbian cuando lo instalé usando apt-get install fbi.
D. Woods
2

¿En qué formato están los datos de la imagen framebuffer?

La documentación de Linux kernel 4.2 https://github.com/torvalds/linux/blob/v4.2/Documentation/fb/api.txt#45 dice:

Los píxeles se almacenan en la memoria en formatos dependientes del hardware. Las aplicaciones deben conocer el formato de almacenamiento de píxeles para poder escribir datos de imagen en la memoria de búfer de trama en el formato esperado por el hardware.

Los formatos se describen por tipos de búfer de cuadro y visuales. Algunas imágenes requieren información adicional, que se almacena en la información de la pantalla variable bits_por_pixel, escala de grises, rojo, verde, azul y campos transp.

Los elementos visuales describen cómo se codifica y ensambla la información de color para crear macropixels. Los tipos describen cómo se almacenan los macropixels en la memoria. Los siguientes tipos y visuales son compatibles.

Sigue una lista de imágenes y tipos, pero la descripción no es suficiente para que comprenda los formatos exactos de inmediato.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
1
@Downvoters por favor explique para que yo pueda aprender y mejorar la información. Nunca tomo represalias. Gracias.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1

Si lo desea cp /dev/fb0 ~/myimage, la imagen solo debe contener la información de píxeles, y el orden debe ser correcto ( RGB, BGR, RGBA, ARGB...)

También quiero hacer esto, pero no encontré una herramienta adecuada, por lo que utilizo python para ayudarme a hacer la imagen previamente. Puedes probar esto .

zqb-all
fuente
0

Si puede instalarlos, fbcatcreará una imagen en ppm y fbgrabcreará una imagen png.

Yves Dorfsman
fuente
0

Mire /usr/include/linux/fb.h en estructuras como fb_var_screeninfo. Puede haber una variedad de profundidades y formatos de color. Veo 16 bits / píxel con demasiada frecuencia, ahora tengo 32. Escriba fbset solo y mostrará la configuración actual. Que seguramente será una de las entradas en /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

Imagemagick podría funcionar si puede hacer que coincida exactamente con el modo que necesita. Probablemente escribiría algo en C, una docena de líneas que llaman libjpeg o libpng pueden descomprimir una imagen en una matriz de memoria. Tus bits / color, etc., deben coincidir o debes escribir algo para convertirlo. Buena experiencia.

Además, en lugar de leer / escribir / dev / fb0 como un archivo, ábralo () para obtener un descriptor de archivo y luego mmap () para que esté trabajando con un puntero a la memoria. Es mucho más rápido hacer transferencias, al menos 10 veces.

Pero para poner imágenes en la pantalla solo instalo qiv. Luego presione F1 para obtener ayuda, pero una x mientras muestra una imagen la escribirá semipermanentemente en la ventana raíz si eso es lo que desea. O simplemente configúrelo como fondo de pantalla en Preferencias de escritorio y aparecerá en cada arranque.

Alan Corey
fuente
El ARGB de la mina aparentemente (Raspbian). Comencé con colores de tipo HTML desde un selector de color GIMP, tomé 4 intentos para hacerlo bien.
Alan Corey