6 Stimmen

SWT: Wie man ein Widget im Hintergrund / in einen Offscreenbuffer "rendert"

Ich wäre Ihnen für Ihren Rat und Ihre Hilfe sehr dankbar:

Wie kann ich ein SWT Widget/Komponente im HINTERGRUND (offscreenbuffer?) rendern und die "gemalten" Pixel, die vom Widget/Komponente gezeichnet wurden, auf die Festplatte speichern:

Was ich derzeit habe, ist:

Display display = new Display();
Shell shell = new Shell(display);
// ...  
MyWidgetComponent mwc = new MyWidgetComponent(shell, SWT.BORDER); 
shell.open();
Image screenshot = new Image(shell.getDisplay(), shell.getBounds());
GC.copyArea(screenshot, 0, 0);
//...

Das Problem: Die Aufnahme des Screenshots der Shell/des Widgets selbst funktioniert, aber es wird ein neues Fenster in der Taskleiste geöffnet. Das ist etwas, das ich NICHT möchte.

Was ich erreichen möchte, ist: Ich möchte diese Anwendung komplett im Hintergrund als "Serveranwendung" laufen lassen (z.B. in ein Servlet einbetten und dieses aufrufen). Die MyWidgetComponent soll also Pixel für Pixel komplett im Offscreenbuffer gerendert werden und ich hole mir später die Pixel ab und speichere sie auf der Festplatte oder gebe das gerenderte Widget direkt als Bild als Ergebnis der Servlet-Anfrage zurück. (Ich möchte in einer Serverumgebung kein Windows aufpoppen lassen, falls es sich um einen Windows-Server handeln sollte...).

Wie kann ich das erreichen? Ich habe viel gesucht, aber nichts Nützliches gefunden.

Herzlichen Dank! Jan

2voto

Paul Lammertsma Punkte 36529

Ich kann Ihre Frage nicht direkt beantworten, aber ich bin auf ein ähnliches Problem gestoßen, mit dem ich zu kämpfen hatte: Ich habe einen Screenshot von einer Shell o Widget während es sich behindert aus der Sicht.

Nehmen wir zum Beispiel das Fenster A das sich mit dem Fenster B . Ein Bildschirmfoto wird erstellt von B mit Ihrem Code:

Image screenshot = new Image(shellB.getDisplay(), shellB.getBounds());
GC.copyArea(screenshot, 0, 0);

Meine Recherchen ergaben, dass dies unter Windows Vista, Windows 7 und Mac OS X möglich ist (bei letzterem bin ich mir allerdings nicht sicher). Unter Windows XP, Linux mit GNOME und Linux mit KDE enthält der Screenshot jedoch einen weißen Bereich, in dem das überlappende Fenster die Sicht behindert.

Ich habe keine Lösung für dieses Problem gefunden, und ich vermute, dass dieses Verhalten nicht nur plattformabhängig ist, sondern auch ziemlich fehlerhaft in SWT.

Ich würde aber gerne hören, dass ich daneben liege!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X