Wie zeichnen Sie die Kurve im framebuffer mit der c-Sprache..?
ich bin neu auf dieser linux-framebuffer, damit jemand mich leiten, um die Linie zu zeichnen-graph im framebuffer. Und ich habe den code zum zeichnen der Grafik in turbo c, aber jetzt in linux. Also bitte helfen Sie mir.
Danke,
Rahul
InformationsquelleAutor Rahul | 2009-12-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
öffnen Sie()
auf die richtige Datei in/dev
(zB./dev/fb0
), dann verwenden Siemmap()
auf der Karte in den Speicher. Manpages helfen, für diese syscalls wenn Sie nicht wissen, wie Sie zu benutzen sind.Dann gibt es einige Strukturen und Konstanten für einige
ioctl () -
s in<linux/fb.h>
. Wie viele kernel-Header, können Sie eine Menge lernen einfach suchen Sie die Datei.Besonders interessant ist die ioctl -
FBIOGET_VSCREENINFO
mitstruct fb_var_screeninfo
. Hinweis: dieses hatxres
,yres
(Auflösung) und derbits_per_pixel
. Dann gibt esFBIOGET_FSCREENINFO
undstruct fb_fix_screeninfo
, die weitere Informationen wietype
undline_length
.Also einen pixel an (x, y) sein könnte
mmap_base_address + x * bits_per_pixel/8 + y * line_length
. Das genaue format der Pixel hängt von den Strukturen, die Sie abrufen über ioctl; es ist Ihre Aufgabe, zu entscheiden, wie zu Lesen/schreiben.Es ist schon eine Weile her, seit ich gearbeitet habe, mit dieser also ich bin ein bisschen diesig auf mehr details..
Hier ist eine quick-and-dirty-code-Beispiel nur um zu zeigen, wie es gemacht wird... habe ich noch nicht getestet.
Wenn ich kompilieren, ich erhalte einige Fehler wie diese, In der Datei enthalten von g ist.c:4: /usr/include/sys/mman.h:38: error: conflicting types for ‘mode_t " /usr/include/linux/types.h:15: Fehler: Vorherige Deklaration von ‘mode_t' war hier In der Datei enthalten von g ist.c:5: /usr/include/unistd.h:203: Fehler: in Konflikt stehende Typen für "gid_t" /usr/include/linux/types.h:27: Fehler: Vorherige Deklaration von "gid_t" war hier /usr/include/unistd.h:208: Fehler: in Konflikt stehende Typen für "uid_t" /usr/include/linux/types.h:26: Fehler: Vorherige Deklaration von "uid_t" war hier In file aus /usr/include/bits/fcntl.h:25,
Muss die Reihenfolge in der ich die Header... Vielleicht versuchen sys/types.h erste?
Ich habe den sys/types.h header-Linie, aber die neuen Fehler sind noch nicht erschienen, wie /usr/include/sys/mman.h:38: error: conflicting types for ‘mode_t " /usr/include/linux/types.h:15: Fehler: Vorherige Deklaration von ‘mode_t' war hier
Den code habe ich hier nicht nur Geräte-setup, es nicht schreibt. Haben Sie versucht, ausfüllen Sachen auf der "TODO" - Teil?
InformationsquelleAutor asveikau
Als alternative zu asveikau Antwort, Sie könnte verwenden DirectFB, die möglicherweise stark vereinfachen Dinge für Sie.
Aber wie das DFB zugegriffen werden kann
Diese links funktionieren nicht im Jahr 2015.
Ich will nicht, um Probleme zu schaffen, aber DirectFB ist eine sex-website, nicht eine FB-API.
Es ist anscheinend verschoben. Ich habe aktualisiert den link.
InformationsquelleAutor greyfade
Von meinem Synaptic auf Rasbian: "DirectFB ist eine Grafik Bibliothek, welche entworfen wurde mit embedded Systemen im Sinn. Es bietet maximale hardware-beschleunigte Leistung bei einem minimum an Ressourcenverbrauch und overhead."
Sowieso, ich habe nicht gesehen, diese Arbeit in einem frame buffer noch nicht, aber ich hoffe, es ist so, ich mache die meisten meiner Grafiken. Sie haben einige linearer Adressraum, Höhe * Breite * bytes pro pixel Anzahl der bytes. Wenn Sie schreiben möchten, um einen bestimmten x -, y-Position, die position im Raum ist gegeben durch (y * Breite * bytes pro pixel) + (x * 3). Farben sind neben RGB-bytes (in der Regel) so, dass bekommt Sie die Adresse der rot-pixel, fügen Sie 1 für grün und 2 für blau. Sie malloc(Höhe * Breite * bytes pro pixel) einen Adressraum, schreiben Sie hinein, dann wählen Sie Ihre Wahl von libpng, libjpeg, libtiff, zu schreiben, dass der Puffer in eine Datei. Wenn Sie wollen, um text in es zu Sie zu Rollen Sie Ihre eigenen, also Stahl ich aus einer alten libgif. Ich habe das Alter erreicht, und die Erfahrung Ebene, wo es einfacher ist, es selbst zu tun, als nur zu lernen, wie jemand anderes dachte, es getan werden sollte. Meine Grafiken kommen aus wie diese:
Ich habe versucht, einen framebuffer wie auf http://raspberrycompote.blogspot.com/2014/04/low-level-graphics-on-raspberry-pi.html aber etwas ist falsch. Ich bin auf eine Pi-3, es wurde wahrscheinlich geschrieben, für einen Pi-1, da war es 2014, 2017 nicht dann. Aber der Pi ist anders als traditionelle Framebuffer, weil die GPU läuft die show. Verwenden Sie diese Methode: http://elinux.org/RPi_Framebuffer
:)
. Es ist unklar, ob Sie eine Antwort auf die ursprüngliche Frage, oder eine neue Frage in der form der Antwort. (Ich lese es als ein bisschen von beiden...) Wenn es Ihr Ziel ist, Hilfe zu erhalten mit Ihrem Thema, dann ist es besser, eine neue Frage stellen, da die Fragen in deine Antwort hier unwahrscheinlich prompt jede weitere Antwort. Zusätzlich, da es RaspberryPi Verwandte, Ihre beste Wette ist wahrscheinlich zu post auf Raspberry pi StackExchange. Viel Glück so oder so.Ich habe noch nicht wirklich ein framebuffer-seit OpenBSD nicht hat und das ist meist das, was ich ausgeführt habe, für 15 Jahre. Nicht auf der Suche nach Hilfe, nur erklären Grafiken ohne Bibliotheken. Ich bin zu geben libvnc versuchen, da es einen virtuellen framebuffer können Sie eine Verbindung mit einem vnc-client, und es läuft in einem Fenster, statt über das ganze display. Ich versuche zu tun, SDR mit Wasserfall, so brauche ich Grafiken, die sich bewegen, und nicht nur noch Bilder.
VNC ist im wesentlichen remote-framebuffer, das ist es, was mich auf die Idee brachte: raspberrypi.org/forums/viewtopic.php?f=67&t=189032 (mein thread dort)
Ja, es scheint zu funktionieren genau so, wie ich es erwartet habe. Ich schrieb eine Schleife senden von 900 bytes an den virtuellen framebuffer und es zog eine Linie wie ich erwartet hatte. Ich die Verbindung von einem anderen Rechner aus, um es zu sehen, es war auf einem Raspberry Pi, ich war auf einer i386-OpenBSD-Kiste. Schlechte Dokumentation hat mich die längste Zeit, die argc-und argv-in den demos gar nichts tun, Sie sind nur Platzhalter.
Das ist ziemlich cool, ich bin froh, Sie haben es zu arbeiten. Ich habe einen Pi3, dass ich in der Regel eine Schnittstelle mit via ssh, aber ich bin fasziniert von Ihren Ergebnissen. (Ich bin eigentlich erstaunt, was Sie zusammengepfercht in Pi3, und wie gut Debian darauf läuft) unter Verwendung der vnc-framebuffer an die Stelle der hardware. Wohl nachsichtiger als gut. Solange Sie die richtige Adresse für den virtuellen framebuffer-ich denke mal im schlimmsten Fall den Absturz vnc anstatt die box nach unten.
InformationsquelleAutor Alan Corey