Wiem, że mogę przechwycić bufor ramki w systemie Linux za pomocą czegoś podobnego cp /dev/fb0 ~/myimage
i ponownie wyświetlić go, kopiując go z powrotem do urządzenia cp ~/myimage /dev/fb0
. W jakim formacie są dane obrazu bufora ramki? i jak miałbym przejść do wyświetlania gotowego obrazu (jpg, png) w buforze ramki? Czy mogę przekonwertować na ten format za pomocą imagemagick?
ps Im za pomocą raspbian pi z systemem Raspbian.
Aktualizacja 11-12-2012
Skończyłem używać pygame do wyświetlania obrazów w mojej aplikacji. Nie jestem pewien, czy używa to bufora ramki do wyświetlania obrazów. Ale całkiem dobrze spełnia moje potrzeby.
źródło
-noverbose
opcja, która powoduje, że wyświetla on sam obraz; nie jest to jednak udokumentowane na stronie podręcznika, ale dotyczy tylko „użycia:”.-noverbose
działa dla mnie, używającfbi
Raspbian, gdy go zainstalowałemapt-get install fbi
.może ci pomóc, szczegółowy podręcznik http://hacklab.cz/2012/04/22/usefulness-linux-framebuffer-virtual-console Myślę, że ma wszystko w jednym miejscu o Linux Framebuffer
źródło
Dokumentacja jądra Linuksa 4.2 https://github.com/torvalds/linux/blob/v4.2/Documentation/fb/api.txt#45 mówi:
Poniżej znajduje się lista elementów wizualnych i typów, ale opis nie wystarcza, abym natychmiast zrozumiał dokładne formaty.
źródło
Jeśli chcesz
cp /dev/fb0 ~/myimage
, obraz powinien zawierać tylko informacje o pikselach, a kolejność powinna być właściwa (RGB, BGR, RGBA, ARGB
...)Też chcę to zrobić, ale nie znalazłem odpowiedniego narzędzia, więc używam Pythona, aby pomóc mi w przygotowaniu obrazu. Możesz tego spróbować .
źródło
Jeśli możesz je zainstalować,
fbcat
utworzy obraz ppm ifbgrab
stworzy obraz png.źródło
Spójrz na /usr/include/linux/fb.h na strukturach takich jak fb_var_screeninfo. Istnieje wiele różnych głębi kolorów i formatów. Zbyt często widzę 16 bitów / piksel, teraz mam 32. Wpisz sam fbset i wyświetli bieżące ustawienia. Który prawie na pewno będzie jednym z wpisów w /etc/fb.modes.
Imagemagick może działać, jeśli możesz dopasować go dokładnie do potrzebnego trybu. Prawdopodobnie napisałbym coś w C, kilkanaście linii wywołujących libjpeg lub libpng może zdekompresować obraz do tablicy pamięci. Twoje bity / kolor itp. Muszą się zgadzać lub musisz napisać coś, aby to przekonwertować. Dobre doświadczenie.
Ponadto zamiast odczytywać / zapisywać / dev / fb0 jako plik, otwórz (), aby uzyskać deskryptor pliku, a następnie mmap (), aby pracować ze wskaźnikiem do pamięci. Robienie przelewów jest znacznie szybsze, co najmniej 10-krotnie.
Ale aby umieścić obrazy na ekranie, po prostu instaluję qiv. Następnie naciśnij F1, aby uzyskać pomoc, ale x podczas wyświetlania obrazu zapisze go częściowo na stałe w oknie głównym, jeśli tego chcesz. Lub po prostu ustaw go jako tapetę w Preferencjach pulpitu, a pojawi się przy każdym uruchomieniu.
źródło