# screenshot machen ohne Robots?



## Nardian (25. Jul 2010)

hi,

gibts vielleicht einen anderen weg einen screenshot vom gesamten monitor zu machen, außer mit robots?
robots scheint mir relativ langsam zu sein... (für meine zwecke ists definitiv zu langsam)

kann man vielleicht etwas mit JOGL oder sowas erreichen? oder mit anderen mitteln?

greetz


----------



## Marco13 (25. Jul 2010)

Grundsätzlich immer mit einer JNI-Anbindung. Kommt darauf an, was das Ziel ist, und welchen Aufwand man betreiben will.


----------



## Kr0e (25. Jul 2010)

Hallo Nardian,

Robot ist in der Tat sehr langsam unter Windows, grad bei hohen Auflösungen. Ich glaube JMF kann auch Screenshots machen, aber keine Ahnung ob das schneller ist. Würde mich aber wundern, wenn JMF auch Robot benutzt. Wäre ja ziemlich sinnfrei...
Ansonsten hab ich im Internet nichts gefunden was einfach wäre oder mal eben testfähig wäre. Ich glaube aber das ist ein ganz normales Problem. Ich glaube aber nicht, dass Screenshots unter Windows schneller möglich sind (Jetzt mal iwelche DX-Hacks rausgelassen). Ist ja alles nicht hardwarebeschleunigt unter Windows. Ich denke mal, dass du einer Art RemoteDesktop machen willst. Da hatte ich das mal für gebraucht. Linux kann das sehr viel schneller, sofern der richtige Grafiktreiber installiert ist. Screenshots unter Linux (Ubuntu z.b.) gingen bei mir immer sehr schnell mit Java/Robot (1-2 ms, auch bei 1680x1050).

Gruß,
Chris


----------



## Geeeee (26. Jul 2010)

Also mit Robot geht auch die Implementierung einer Remotedesktopanwendung. Hatte ich vor ein paar Monaten selber mal evaluiert. Mir war schon vorher bewusst, dass der Robot recht langsam arbeiten sollte, aber dann war ich recht positiv überrascht, wie -für Remotedesktopverhältnisse- flüssig das ganze wirkte.
"Leider" sind die Testrechner sehr gut bestückt gewesen, weshalb ich mehr oder weniger nur die Datenübertragung per "Diff-Bilder" optimiert habe.
Als Alternative steht, wie immer und oben erwähnt, JNI zur Verfügung. Gerade beim "Zusammenbauen" des Bildes, um es dann auch darstellen zu können, hatte ich Probleme und diese Lösung vorerst verworfen.


----------



## Nardian (27. Jul 2010)

ja, im prinzip gehts wirklich um ne art remotedesktop...

nur mein problem mit dem grad ist, dass das screenshotten (zumindest under win) recht lang dauert - soweit ich mich richtig erinnere hats bei mir so um die 100ms gedauert oO
dazu kommt dann auch noch die kompression... momentan verwenden wir dafür einen GZIP-Stream.. der macht seine arbeit zwar recht gut, nur ein keyframe (also ein komplettes bild) braucht trotzdem nochmal ca 100ms (bzw eher etwas mehr)... 
klar - alles ist besser als nichts, nur wollte ich mal fragen ob jemand irgendwas kennt mit dems eben schneller gehn würde..

jni - ja, bin nicht wirklich abgeneigt... wenn jemand ne gute lib kennt, würds mich freun wenn er sein wissen mit uns teilen würde 
und das JMF ist ein interessanter hinweis, werd ich mir genauer anschaun

thx schonmal an alle


----------



## Kr0e (27. Jul 2010)

MIr fällt da grad ein, dass das mit DX ziemlich shcnell gehen muss.
Es gibt ja Fraps, das kann in der freigeschalteten Version 100 FPS realtime Videos aufnehmen.
Wenn es nur für Windows sein soll, kannste damit bestimmt einfach weiterkommen. Ein allround-Lösung
ist natürlich dann immer lagnsamer bzw. schlechter.. das ist ganz klar. Etwas derart plattformabhängiges
kann auch nicht überall gleich schnell funktionieren.


----------



## Nardian (27. Jul 2010)

hmm.. ja, DX wär sehr wahrscheinlich ne lösung...

kennt jemand vllt gute libs oder sowas?

(ich bitte hier niemanden für mich zu googln, kann ich ja auch selber machen, nur falls jemand schon was kennt, würde er mir vermutlich viel zeit ersparen)


----------



## Kr0e (27. Jul 2010)

Tagchen,

eine fertige Lib nur zum Screenshotten gibts bestimmt nicht.

Nimm einen "DirectX Java Wrapper", ich vermute, dass es das auch für DX geben muss,
wenns das auch für OpenGL gibt.. Jogl, LWJGL...

Und dann ganz java-frei nach DX tuts suchen für screen capture oder so...


----------



## coder101101 (3. Mrz 2012)

Hi
Ich Stehe vor dem selben Problem ich will ebenfalls eine Art Remote Desktop machen.Allerdings komm ich nur auf 3 FPS und ein 3tel der Zeit geht für den Scrennshot drauf(200 ms unter Ubuntu) kennt jmd. einen Platformunabhänigen und möglichst schnellen erstatz für den Robot?


----------



## Nardian (3. Mrz 2012)

Ich fürchte du wirst plattformunabhängig nicht weiterkommen.. ich habe damals auch ein Remote Desktop System entwickelt.. Es hat zwar "brauchbar" funktioniert, jedoch wie du schon sagtest mit einer nicht besonders guten FPS... 

Als ob das noch nicht genug wäre, hat Robot leider noch einen Nachteil den ich feststellen musste. Unter Windows (denke dass es ähnliche Fälle auch unter linux und anderen OS geben wird) kann Robot eine Fullscreen-DirectX-Applikation nicht screenshoten. Entweder ist der ganze Bildschirm Schwarz, oder man sieht genau das was man schon vorher gesehen hat (also als ob gar nicht ge-screenshot-et werden würde..)

Ich denke immer noch dass die "sauberste" Methode ein RMS in Java zu entwickeln eben eine immer funktionierende (aber langsame) Robot alternative, und dann optional plattform-bezogene native-Implementierungen einer Caputre-Funktion ist. 

Falls jemand was anderes weiß / ne andere Idee hat, immer her damit 

MfG


----------

