czy mogę wyświetlić JPG lub PNG w buforze ramki (/ dev / fb *)?

19

Wiem, że mogę przechwycić bufor ramki w systemie Linux za pomocą czegoś podobnego cp /dev/fb0 ~/myimagei 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.

ndmweb
źródło

Odpowiedzi:

8

Czy próbowałeś Fbida ?

fbidazawiera fbiprzeglądarkę obrazów dla bufora ramki.

Link do fbistrony man - http://manpages.ubuntu.com/manpages/lucid/man1/fbi.1.html

PS - Nie jestem pewien, czy to zadziała w języku Raspbian.

VenkatH
źródło
Niestety nie wydaje się możliwe, aby zapobiec wyświetlaniu paska stanu „fbi” na dole ekranu. To trochę showstopper do różnych zastosowań ...
Jules
3
@Jules Na Debianie 8 (testowanie) istnieje -noverboseopcja, która powoduje, że wyświetla on sam obraz; nie jest to jednak udokumentowane na stronie podręcznika, ale dotyczy tylko „użycia:”.
Abbafei,
Czy to działa? Wcześniej utworzyłem kopię ze źródła na stronie internetowej autora i ta opcja była dostępna, ale opcja ta nie wydawała się w ogóle nic robić w tej wersji.
Jules
@Jules -noverbosedziała dla mnie, używając fbiRaspbian, gdy go zainstalowałem apt-get install fbi.
D. Woods,
2

W jakim formacie są dane obrazu bufora ramki?

Dokumentacja jądra Linuksa 4.2 https://github.com/torvalds/linux/blob/v4.2/Documentation/fb/api.txt#45 mówi:

Piksele są przechowywane w pamięci w formatach zależnych od sprzętu. Aplikacje muszą znać format przechowywania pikseli, aby zapisać dane obrazu w pamięci bufora ramki w formacie oczekiwanym przez sprzęt.

Formaty są opisane przez typy buforów ramek i elementy graficzne. Niektóre elementy wizualne wymagają dodatkowych informacji, które są przechowywane w zmiennych informacji ekranowych bits_per_pixel, skala szarości, czerwony, zielony, niebieski i transp.

Elementy wizualne opisują sposób kodowania i składania informacji o kolorze w celu utworzenia makropikseli. Typy opisują sposób przechowywania makropikseli w pamięci. Obsługiwane są następujące typy i elementy graficzne.

Poniżej znajduje się lista elementów wizualnych i typów, ale opis nie wystarcza, abym natychmiast zrozumiał dokładne formaty.

Ciro Santilli
źródło
1
@Downvoters proszę wyjaśnić, abym mógł uczyć się i poprawiać informacje. Nigdy nie odwetu. Dzięki.
Ciro Santilli 19 改造 中心 法轮功 六四 事件
1

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ć .

zqb-all
źródło
0

Jeśli możesz je zainstalować, fbcatutworzy obraz ppm i fbgrabstworzy obraz png.

Yves Dorfsman
źródło
0

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.

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 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.

Alan Corey
źródło
Najwyraźniej mój ARGB (Raspbian). Zacząłem od kolorów typu HTML z próbnika kolorów GIMP, podejmowałem 4 próby, aby to zrobić poprawnie.
Alan Corey