2009-12-03 6 views
6

Yo agradecería mucho su consejo y ayuda:SWT: Cómo “render” un widget en el fondo/en un offscreenbuffer

¿Cómo puedo hacer que un SWT Widget/Componente en el fondo (? Offscreenbuffer) y obtener los píxeles “pintadas” que fueron dibujadas por el Widget/Componente para guardarlos en el disco duro:

lo que tengo actualmente es:

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); 
//... 

Problema: Tomando la pantalla en sí de la cáscara/Reproductor funciona, pero se abrirá un nuevo Windo w en la barra de tareas. Eso es algo que NO quiero.

Lo que quiero lograr es: Quiero ejecutar esta aplicación completamente en segundo plano como una "aplicación de servidor" (por ejemplo incrustar y llamar esto a un servlet). Por lo tanto, MyWidgetComponent debe mostrarse píxel a píxel completamente en el buffer externo y luego recuperar los píxeles y guardarlos en el disco duro o devolver directamente el widget representado como una imagen como resultado de la solicitud de servlet. (No quiero ventanas emergentes en un entorno de servidor, en caso de que esto sea un servidor de Windows ...).

¿Cómo puedo lograr esto. Busqué mucho pero no encontré nada útil.

Muchas gracias !! Ene

Respuesta

2

no puedo responder a su pregunta directamente, pero se han topado con un problema similar que tuve problemas con: tomar una captura de pantalla de un ShellWidget o mientras se encuentra obstruido de la vista.

Considere, por ejemplo, la ventana A que se superpone a la ventana B. Una captura de pantalla está hecha de B utilizando su código:

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

Mis resultados revelaron que esto se podría hacer con Windows Vista, Windows 7 y Mac OS X (aunque estoy seguro acerca de este último). Sin embargo, en Windows XP, Linux con GNOME y Linux con KDE, la captura de pantalla contiene un área blanca donde la ventana superpuesta obstruye la vista.

No he encontrado una solución para esto, y sospecho que no solo es dependiente de esta plataforma de comportamiento, sino también bastante problemática en SWT.

¡Me encantaría saber que estoy fuera de lugar!

+0

Hola Paul, muchas gracias por tu respuesta !! Tu respuesta es muy interesante de leer. Hice una experiencia similar (que podría ser obvia para los expertos, pero no para mí) que hace que la representación del "servidor" sea aún más problemática: como se describió anteriormente, siempre aparecerá una ventana, pero no solo aparece esta ventana, sino que también ser "VISIBLE/MAXIMIZADO" y no se puede "minimizar" (de modo que solo se muestre un ícono de bandeja/barra de tareas), como en estado minimizado, también aparece una pantalla "en blanco". Esto significa que la ventana debe mostrarse completamente, lo que es aún peor en un entorno de servidor. – jan

+0

Parece que esa es la última palabra, en lo que se refiere a SWT. Tenga en cuenta que puede evitar esto utilizando JNI/JNA accediendo a las API de Windows o llamando a métodos nativos de Mac. No es muy glamoroso, pero podría hacer bien el trabajo. –

+0

Esto debería ser un error planteado contra SWT. Acabo de pasar 5 horas dedicando tiempo a esto, y tuve el mismo problema. – Phil

Cuestiones relacionadas