(Struts2-Anwendung) Abmessungen für Screenshot von laufendem Applet?

brines

Grünschnabel
Hallo Leute,

auf der Einstiegsseite meiner Anwendung läuft ein Applet. Der Nutzer soll den aktuellen Stand des Applets mit einem Screenshot per Knopfdruck festhalten können, anschließend soll der Screenshot in einer neuen Seite angezeigt und der Nutzer dort die Möglichkeit haben, in einem Formular eine Feedbacknachricht zu verfassen. Diese wird schließlich inklusive Screenshot per Mail verschickt.

Meine Frage: wie bekomme ich einen Screenshot von genau diesem Ausschnitt (also vom Applet), unabhängig von Browser und Bildschirm, und wie kann ich ihn (threadsafe) an meine Anwendung übergeben?

Was derzeit vorhanden ist: auf der Einstiegseite gibt es einen Feedbackknopf, der eine Struts2-Java-Action auslöst (CreateFeedbackAction extends ActionSupport); ist das Feedbackformular korrekt ausgefüllt, kann es abgeschickt und die Mail verschickt werden. Was ich mir derzeit überlegt habe, sind 2 Möglichkeiten:

Könnte man für das Schießen des Screenshots auch eine solche Action schreiben, z.B. mithilfe eines Robots, wie im Screenshot-Example aus diesem Forum (siehe hier und andere http://www.tutorials.de/forum/java/...en-ohne-die-eigene-anwendung.html#post1241949)? Das hätte den Vorteil, dass ein jeder Request ohne viel Parameterübergabe an "seine" File käme, einfach mit der Struts2-Setter/Getter-Methode. Woher kriege ich dann die Koordinaten für meinen Ausschnitt bzw. mein Rechteck für robot.createScreenCapture(rect); ? Kann man z.B. über die verschiedenen Javascript-Tags (Applet, Object) Informationen über die exakte, browser- und bildschirm-abhängige Position des Applets ausliefern?

Sollte die Appletfunktion doch eher ins Applet integriert werden? Ich habe eine Funktion in Java, die ein Applet und eine File übergeben bekommt und mithilfe von Graphics2D einen Screenshot des Applets als File speichert. Nur: wie kommt die äußere Anwendung an genau diesen Screenshot heran (genau an den, der zum entsprechenden Request gehört)?

Vielleicht gibt es ja auch eine ganz andere Lösung?

Jemand eine Idee?


Gruß,
Sabrina
 
Hallo,

also wenn du nur einen "Screenshot" von der Applet Region brauchst kannst du innerhalb des Applets einfach folgendes machen:

Java:
        BufferedImage capture = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
        paint(capture.getGraphics()); //paint ist dann die paint Methode des Applets welche alles Zeichnet
        //save capture...

Gruß Tom
 
Hallo Thomas,

danke für Deine schnelle Antwort. Deine Variante ist sehr viel weniger umständlich als meine :). Aber mein Problem ist nach wie vor: Wie komme ich dann an das Ergebnis "ran"? Wie übergebe ich meinen ganz speziellen Screenshot an die Anwendung?

Szenario: Das Applet liegt in einer mitihilfe von Struts2 generierten HTML-Seite. Der User klickt auf den Screenshot - Button innerhalb des Applets. Das Applet fotografiert sich selbst. Irgendwo wird eine File angelegt (richtig?). Wie teile ich der umgebenden Anwendung mit, wo sie zu suchen hat? Wie könnte ein getImageFile() o.ä. funktionieren?

Danke nochmal und Grüße,

Sabrina
 
Hallo,

wenn du das Applet-Capture dann noch an den Server schicken willst hast du hier mehrere Möglichkeiten...
Die einfachste wäre wohl das BufferedImage über ImageIO.writeImage(...) bzw. JpegEncoder an den über einen entsprechenden OutputStream zum Server zu Streamen.
Auf dem Server hast du dann ein Servlet, dass dann die Bilddaten aus dem Request / InputStream ausliest und entsprechend weiter verarbeitet (auf die Platte legt, Gesichtserkennung durchführt etc.)
Auf dem Server könntest du aber auch genauso gut ein PHP Script haben welches die Bilddaten entgegennimmt:
http://www.tutorials.de/forum/java/257429-dateiupload-mit-java-und-php.html

Gruß Tom
 
Zurück