PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 100 Screenshots pro Sekunde (Sprache = C)



suck
12-07-2007, 18:04
Hallo Forum!

Die Zahl 100 aus dem Titel ist nicht relevant. Was ich suche, ist schlicht und ergreifend die performantest mögliche Methode, um den Bildschirminhalt in den (für mich nutzbaren) Speicher zu laden bzw. zu kopieren.

Bei 24Bit Farbtiefe und einer Bildschirmauflösung von 1280x1024 Pixeln sollte das Ergebnis ein Byte-Array sein, dass 3 * 1280 * 1024 Byte gross ist. Also sowas wie eine BMP-Datei mit 24Bit Farbtiefe aber ohne Header.

Das geplante Programm soll keine GUI haben. Ich benötige nur den Screenshot. Ich möchte kein GTK oder QT oder sonst was in der Art nutzen. Nur an den X11-Libs werde ich wohl kaum vorbeikommen. Ich möchte unabhängig vom Grafiktreiber sein.

Ich habe unter Linux/Unix übrigens noch nie ein Programm mit GUI programmiert oder mich mit den Xlibs beschäfftigt - programmieren kann ich aber schon. Überfordert mich also bitte nicht. ;)

Ich hoffe auf gute Ratschläge und verbleibe mit allerbesten Grüssen.

undefined
13-07-2007, 09:24
Dann ist Image Magick genau das was du benötigst.
http://www.imagemagick.org/script/import.php
import -pause 0 -quality 100 -depth 8 -label Screenshot -geometry 1600x1200 -resize 800x600 -window root /tmp/Screen

suck
14-07-2007, 19:44
Danke für deine Antwort.

"import" von ImageMagic und "xwd" habe ich getestet. Ohne Zoom und im einfachstem Bildformat (keine Umrechnung nötig) sind beide extremst langsam. "xwd" ist sogar noch ein wenig schneller als "import". Das schnellste, was ich bisher getestet habe, war ein Program, dass "imlib2" nutzt. Dieses nutze ich auch für meine Thumbnails in fvwm2. Aber auch das ist sicherlich noch verbesserungswürdig bzw. zu langsam. Ich brauche was deutlich schnelleres.

Gibt es denn im Speicher wirklich keinen Bereich, welcher den aktuellen Bildschirminhalt repräsentiert, und den man einfach so auslesen kann? Dann würde das mit Assembler ziemlich schnell gehen. Aber sowas gibt es wohl nicht. ;(

anda_skoa
15-07-2007, 15:53
Bei einem X Server mit aktiver XComposite Extension hat der Composite Manager diese Möglichkeit.

Aus einem X11 Client kannst du XCopyArea verwenden, um einen Teil eines Fensters, bzw. auf ein ganzes Fenster zu kopieren.

Eventuell gibt es noch andere Möglichkeiten. Code Software wie VNC oder Screenrecorder könnte da hilfreich sein.

Ciao,
_